如何在HarmonyOS對資料庫進行備份,恢復與加密
資料庫備份與恢復
場景介紹
當應用在處理一項重要的操作,顯然是不能被打斷的。例如:寫入多個表關聯的事務。此時,每個表的寫入都是單獨的,但是表與表之間的事務關聯性不能被分割。
如果操作的過程中出現問題,開發者可以使用恢復功能,將資料庫恢復到之前的狀態,重新對資料庫進行操作。
在資料庫被篡改、刪除、或者裝置斷電場景下,資料庫可能會因為資料丟失、資料損壞、髒資料等而不可用,可以透過資料庫的備份恢復能力將資料庫恢復至可用狀態。
鍵值型資料庫和關係型資料庫均支援對資料庫的備份和恢復。另外,鍵值型資料庫還支援刪除資料庫備份,以釋放本地儲存空間。
鍵值型資料庫備份、恢復與刪除
鍵值型資料庫,透過backup介面實現資料庫備份,透過restore介面實現資料庫恢復,透過deletebackup介面刪除資料庫備份。具體介面及功能,可見 分散式鍵值資料庫。
1. 建立資料庫。(1) 建立kvManager。
(2) 配置資料庫引數。
(3) 建立kvStore。
import distributedKVStore from '@ohos.data.distributedKVStore'; let kvManager; let context = getContext(this); const kvManagerConfig = { context: context, bundleName: 'com.example.datamanagertest' } try { kvManager = distributedKVStore.createKVManager(kvManagerConfig); console.info('Succeeded in creating KVManager.'); } catch (e) { console.error(`Failed to create KVManager. Code:${e.code},message:${e.message}`); } let kvStore; try { const options = { createIfMissing: true, encrypt: false, backup: false, kvStoreType: distributedKVStore.KVStoreType.SINGLE_VERSION, securityLevel: distributedKVStore.SecurityLevel.S2 }; kvManager.getKVStore('storeId', options, (err, store) => { if (err) { console.error(`Fail to get KVStore. Code:${err.code},message:${err.message}`); return; } console.info('Succeeded in getting KVStore.'); kvStore = store; }); } catch (e) { console.error(`An unexpected error occurred. Code:${e.code},message:${e.message}`); }
2. 使用put()方法插入資料。
const KEY_TEST_STRING_ELEMENT = 'key_test_string'; const VALUE_TEST_STRING_ELEMENT = 'value_test_string'; try { kvStore.put(KEY_TEST_STRING_ELEMENT, VALUE_TEST_STRING_ELEMENT, (err) => { if (err !== undefined) { console.error(`Fail to put data. Code:${err.code},message:${err.message}`); return; } console.info('Succeeded in putting data.'); }); } catch (e) { console.error(`An unexpected error occurred. Code:${e.code},message:${e.message}`); }
3. 使用backup()方法備份資料。
let file = 'BK001'; try { kvStore.backup(file, (err) => { if (err) { console.error(`Fail to backup data.code:${err.code},message:${err.message}`); } else { console.info('Succeeded in backupping data.'); } }); } catch (e) { console.error(`An unexpected error occurred. Code:${e.code},message:${e.message}`); }
4. 使用delete()方法刪除資料(模擬意外刪除、篡改場景)。
try { kvStore.delete(KEY_TEST_STRING_ELEMENT, (err) => { if (err !== undefined) { console.error(`Fail to delete data. Code:${err.code},message:${err.message}`); return; } console.info('Succeeded in deleting data.'); }); } catch (e) { console.error(`An unexpected error occurred. Code:${e.code},message:${e.message}`); }
5. 使用restore()方法恢復資料。
let file = 'BK001'; try { kvStore.restore(file, (err) => { if (err) { console.error(`Fail to restore data. Code:${err.code},message:${err.message}`); } else { console.info('Succeeded in restoring data.'); } }); } catch (e) { console.error(`An unexpected error occurred. Code:${e.code},message:${e.message}`); }
6. 當本地裝置儲存空間有限或需要重新備份時,還可使用deleteBackup()方法刪除備份,釋放儲存空間。
let kvStore; let files = ['BK001']; try { kvStore.deleteBackup(files).then((data) => { console.info(`Succeed in deleting Backup. Data:filename is ${data[0]},result is ${data[1]}.`); }).catch((err) => { console.error(`Fail to delete Backup. Code:${err.code},message:${err.message}`); }) } catch (e) { console.error(`An unexpected error occurred. Code:${e.code},message:${e.message}`); }
關係型資料庫備份與恢復
關係型資料庫,透過backup介面實現資料庫備份,透過restore介面實現資料庫恢復。具體介面及功能,可見 關係型資料庫。
1. 使用getRdbStore()方法建立關係型資料庫。
import relationalStore from '@ohos.data.relationalStore'; let store; let context = getContext(this); const STORE_CONFIG = { name: 'RdbTest.db', securityLevel: relationalStore.SecurityLevel.S1 }; relationalStore.getRdbStore(context, STORE_CONFIG, (err, rdbStore) => { store = rdbStore; if (err) { console.error(`Failed to get RdbStore. Code:${err.code},message:${err.message}`); return; } store.executeSql("CREATE TABLE IF NOT EXISTS EMPLOYEE (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, age INTEGER, salary INTEGER, codes Uint8Array);", null); console.info('Succeeded in getting RdbStore.'); })
2. 使用insert()方法插入資料。
const valueBucket = { 'NAME': 'Lisa', 'AGE': 18, 'SALARY': 100.5, 'CODES': new Uint8Array([1, 2, 3, 4, 5]) }; store.insert('EMPLOYEE', valueBucket, relationalStore.ConflictResolution.ON_CONFLICT_REPLACE, (err, rowId) => { if (err) { console.error(`Failed to insert data. Code:${err.code},message:${err.message}`); return; } console.info(`Succeeded in inserting data. rowId:${rowId}`); })
3. 使用backup()方法備份資料。
store.backup('dbBackup.db', (err) => { if (err) { console.error(`Failed to backup data. Code:${err.code},message:${err.message}`); return; } console.info(`Succeeded in backuping data.`); })
4. 使用delete()方法刪除資料(模擬意外刪除、篡改場景)。
let predicates = new relationalStore.RdbPredicates('EMPLOYEE'); predicates.equalTo('NAME', 'Lisa'); let promise = store.delete(predicates); promise.then((rows) => { console.info(`Delete rows: ${rows}`); }).catch((err) => { console.error(`Failed to delete data. Code:${err.code},message:${err.message}`); })
5. 使用restore()方法恢復資料。
store.restore('dbBackup.db', (err) => { if (err) { console.error(`Failed to restore data. Code:${err.code},message:${err.message}`); return; } console.info(`Succeeded in restoring data.`); })
資料庫加密
場景介紹
為了增強資料庫的安全性,資料庫提供了一個安全適用的資料庫加密能力,從而對資料庫儲存的內容實施有效保護。透過資料庫加密等安全方法實現了資料庫資料儲存的保密性和完整性要求,使得資料庫以密文方式儲存並在密態方式下工作,確保了資料安全。
加密後的資料庫只能透過介面進行訪問,無法透過其它方式開啟資料庫檔案。資料庫的加密屬性在建立資料庫時確認,無法變更。
鍵值型資料庫和關係型資料庫均支援資料庫加密操作。
鍵值型資料庫加密
鍵值型資料庫,透過options中encrypt引數來設定是否加密,預設為false,表示不加密。encrypt引數為true時表示加密。
具體介面及功能,可見 分散式鍵值資料庫。
import distributedKVStore from '@ohos.data.distributedKVStore'; let kvManager; let context = getContext(this); const kvManagerConfig = { context: context, bundleName: 'com.example.datamanagertest' } try { kvManager = distributedKVStore.createKVManager(kvManagerConfig); console.info('Succeeded in creating KVManager.'); } catch (e) { console.error(`Failed to create KVManager. Code:${e.code},message:${e.message}`); } let kvStore; try { const options = { createIfMissing: true, // 設定資料庫加密 encrypt: true, backup: false, kvStoreType: distributedKVStore.KVStoreType.SINGLE_VERSION, securityLevel: distributedKVStore.SecurityLevel.S2 }; kvManager.getKVStore('storeId', options, (err, store) => { if (err) { console.error(`Fail to get KVStore. Code:${err.code},message:${err.message}`); return; } console.info('Succeeded in getting KVStore.'); kvStore = store; }); } catch (e) { console.error(`An unexpected error occurred. Code:${e.code},message:${e.message}`); }
關係型資料庫加密
關係型資料庫,透過StoreConfig中encrypt屬性來設定是否加密,預設為false,表示不加密。encrypt引數為true時表示加密。
具體介面及功能,可見 關係型資料庫。
import relationalStore from '@ohos.data.relationalStore'; let store; let context = getContext(this); const STORE_CONFIG = { name: 'RdbTest.db', securityLevel: relationalStore.SecurityLevel.S1, encrypt: true }; relationalStore.getRdbStore(context, STORE_CONFIG, (err, rdbStore) => { store = rdbStore; if (err) { console.error(`Failed to get RdbStore. Code:${err.code},message:${err.message}`); return; } console.info(`Succeeded in getting RdbStore.`); })
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70009402/viewspace-2993189/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 備份與恢復:polardb資料庫備份與恢復資料庫
- 【備份恢復】從備份恢復資料庫資料庫
- postgresql備份與恢復資料庫SQL資料庫
- mongo資料庫備份與恢復Go資料庫
- 資料庫的備份與恢復資料庫
- Informix資料庫備份與恢復ORM資料庫
- 【Mongo】Mongodump 與 mongorestore對mongo進行備份恢復GoREST
- rman資料庫全庫備份與恢復資料庫
- RMAN備份與恢復之加密備份加密
- mysql的資料庫備份與恢復MySql資料庫
- oracle資料庫的備份與恢復Oracle資料庫
- 資料庫備份與恢復技術資料庫
- 資料庫備份與異機恢復——熱備份方式資料庫
- 對二所ATC的MySQL進行 備份與恢復MySql
- Oracle資料庫備份與恢復之三:OS備份/使用者管理的備份與恢復Oracle資料庫
- 第5章:從開啟的資料庫備份與恢復之從開啟的資料庫備份中進行不完全恢復資料庫
- Oracle資料庫備份與恢復之RMANOracle資料庫
- 關閉資料庫的備份與恢復資料庫
- Oracle資料庫的備份與恢復(轉)Oracle資料庫
- 資料庫備份與恢復----第一課資料庫
- Oracle 資料庫的備份與恢復(轉)Oracle資料庫
- 【備份恢復】Oracle 資料備份與恢復微實踐Oracle
- 【備份恢復】noarchive模式下使用增量備份恢復資料庫Hive模式資料庫
- mongodb資料庫備份與恢復(資料庫資料遷移)MongoDB資料庫
- mongdb遭遇勒索,用備份進行資料恢復資料恢復
- Docker Swarm 進階:資料卷備份與恢復DockerSwarm
- Mysql資料備份與恢復MySql
- 使用mysqldump對mysql進行備份和恢復MySql
- 使用xtrabackup對mysql進行備份和恢復MySql
- 【備份恢復】在 ARCHIVELOG 模式下執行資料庫還原和恢復操作(源庫備份源庫恢復)Hive模式資料庫
- 使用冷備份與冷備份後的資料庫歸檔日誌檔案進行資料庫不完整恢復資料庫
- DB2的資料庫備份與恢復DB2資料庫
- ORACLE RAC資料庫的備份與恢復(6)Oracle資料庫
- ORACLE RAC資料庫的備份與恢復(5)Oracle資料庫
- ORACLE RAC資料庫的備份與恢復(4)Oracle資料庫
- ORACLE RAC資料庫的備份與恢復(3)Oracle資料庫
- ORACLE RAC資料庫的備份與恢復(2)Oracle資料庫
- ORACLE RAC資料庫的備份與恢復(1)Oracle資料庫