如何在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】Mongodump 與 mongorestore對mongo進行備份恢復GoREST
- MySQL-19.資料庫備份與恢復MySql資料庫
- mongodb資料庫備份與恢復(資料庫資料遷移)MongoDB資料庫
- 備份與恢復:Polardb資料庫資料基於時間點恢復資料庫
- Mysql資料備份與恢復MySql
- mongdb遭遇勒索,用備份進行資料恢復資料恢復
- Docker Swarm 進階:資料卷備份與恢復DockerSwarm
- Linux下MySQL資料庫的備份與恢復LinuxMySql資料庫
- Mysql資料庫備份及恢復MySql資料庫
- 達夢資料庫備份恢復資料庫
- SQL Server中使用臨時表進行資料備份與恢復SQLServer
- RabbitMQ如何備份與恢復資料MQ
- Dedecms資料庫恢復與備份的兩種方法資料庫
- 淺談達夢資料庫的備份與恢復資料庫
- Mongo 資料庫備份和恢復命令Go資料庫
- pg_dump 備份,恢復資料庫資料庫
- PostgreSql資料庫的備份和恢復SQL資料庫
- SqlServer資料庫恢復備份資料的方法SQLServer資料庫
- RAC備份恢復之Voting備份與恢復
- mysqldump使用方法(MySQL資料庫的備份與恢復)MySql資料庫
- vivo 資料庫備份恢復系統演化資料庫
- 使用Mysqldump備份和恢復MySQL資料庫MySql資料庫
- PG-pg_dump備份/恢復資料庫資料庫
- 資料庫資料恢復—無備份,binlog未開啟的Mysql資料庫資料恢復案例資料庫資料恢復MySql
- 分散式文件儲存資料庫之MongoDB備份與恢復分散式資料庫MongoDB
- NoSQL 資料庫案例實戰 -- MongoDB資料備份、恢復SQL資料庫MongoDB
- RMAN備份恢復典型案例——資料庫卡頓資料庫
- MySQL備份與恢復——基於Xtrabackup物理備份恢復MySql
- Jenkins備份與恢復Jenkins
- Postgresql 備份與恢復SQL
- MySQL 備份與恢復MySql
- Mysql備份與恢復(1)---物理備份MySql
- 時序資料庫InfluxDB之備份和恢復策略資料庫UX
- 時序資料庫 InfluxDB 之備份和恢復策略資料庫UX