全文深度剖析國產(chǎn)化數(shù)據(jù)庫達夢之備份恢復體系
達夢數(shù)據(jù)庫產(chǎn)品架構DM8 采用了獨特的雙存儲引擎架構,行存儲引擎和列存儲引擎可相互配合、協(xié)同工作。同時實現(xiàn)了計算層和存儲層的分離,同一內(nèi)核既支持共享存儲式集群,也支持分布式事務集群。 相較于目前主流產(chǎn)品架構——不同特性依靠不同內(nèi)核去實現(xiàn),DM8 架構為業(yè)界首創(chuàng),也是未來數(shù)據(jù)庫架構的發(fā)展方向。

數(shù)據(jù)安全的最后防線
備份原理
物理備份就是把這些數(shù)據(jù)文件中的有效數(shù)據(jù)頁備份起來,在出現(xiàn)故障時,用于恢復數(shù)據(jù)。一份完整的物理備份包括數(shù)據(jù)備份和 REDO 日志備份兩部分。數(shù)據(jù)備份是拷貝數(shù)據(jù)頁內(nèi)容,REDO 日志備份則是拷貝備份過程中產(chǎn)生的 REDO 日志。參考原理圖如下:
備份的意義
-
數(shù)據(jù)完整性的保障:數(shù)據(jù)備份的首要目的是確保數(shù)據(jù)的完整性。在面臨非法入侵、斷電、病毒感染等可能導致數(shù)據(jù)丟失的風險時,備份的數(shù)據(jù)可以作為恢復原始數(shù)據(jù)的依據(jù)。因此,定期進行數(shù)據(jù)備份是防止數(shù)據(jù)丟失、維護數(shù)據(jù)完整性的有效手段。
-
數(shù)據(jù)還原的能力:當數(shù)據(jù)庫因錯誤、崩潰或其他原因無法正常使用時,數(shù)據(jù)還原成為恢復系統(tǒng)正常運行的關鍵步驟。通過還原備份的數(shù)據(jù),可以迅速恢復數(shù)據(jù)庫到之前的狀態(tài),確保業(yè)務的連續(xù)性。
-
提高系統(tǒng)可用性和災難恢復性:備份不僅是為了應對當前的問題,更是為了在未來的某個時刻,當系統(tǒng)面臨崩潰或其他災難性事件時,能夠迅速恢復并繼續(xù)提供服務。這大大提高了系統(tǒng)的可用性和災難恢復性,確保了業(yè)務的持續(xù)穩(wěn)定運行。
-
最優(yōu)的數(shù)據(jù)恢復方案:在數(shù)據(jù)庫系統(tǒng)崩潰或數(shù)據(jù)丟失的情況下,使用備份數(shù)據(jù)來還原數(shù)據(jù)庫是成本最低、效果最好的恢復方案。與其他可能的恢復手段相比,數(shù)據(jù)備份提供了最小代價的數(shù)據(jù)恢復途徑。
-
防范災難的強力手段:數(shù)據(jù)是現(xiàn)代企業(yè)和個人最重要的資產(chǎn)之一。沒有數(shù)據(jù),許多業(yè)務將無法繼續(xù)。因此,數(shù)據(jù)庫備份不僅是對數(shù)據(jù)的保護,更是對業(yè)務連續(xù)性的保障。它是一種防范災難于未然的強力手段,能夠確保在遭遇不可預見的風險時,企業(yè)和個人能夠迅速恢復并繼續(xù)前行。
備份前準備
確定備份目錄并授權
#備份保存目錄
mkdir -p /data/dm/dmbak/
#授權
chown -R dmdba:dinstall /data/dm/
聯(lián)機備份需要開啟歸檔
命令行開啟歸檔方法
##修改數(shù)據(jù)庫為 Mount 狀態(tài)
ALTER DATABASE MOUNT;
##開啟歸檔模式
ALTER DATABASE ARCHIVELOG;
##配置本地歸檔
ALTER DATABASE ADD ARCHIVELOG 'DEST = /home/dm_arch/arch, TYPE = local,FILE_SIZE = 1024, SPACE_LIMIT = 2048';
##修改數(shù)據(jù)庫為 Open 狀態(tài)
ALTER DATABASE OPEN;
##查看歸檔是否開啟
select arch_mode from v$database;
不同情況下聯(lián)機備份恢復實戰(zhàn)
經(jīng)過上面的準備,我們針對不同情況下的數(shù)據(jù)備份恢復進行實戰(zhàn)模擬。主要包含如下三種情況:
全備還原恢復
此次情況主要模擬存在全量備份的情況,如何恢復數(shù)據(jù)。
1、創(chuàng)建測試表
[dmdba@test bin]$ ./disqlSQL> drop table test;操作已執(zhí)行已用時間: 44.893(毫秒). 執(zhí)行號:105.SQL> create table test (a int );操作已執(zhí)行已用時間: 50.759(毫秒). 執(zhí)行號:106.SQL> insert into test values (1);影響行數(shù) 1已用時間: 2.066(毫秒). 執(zhí)行號:107.SQL> commit;操作已執(zhí)行已用時間: 24.325(毫秒). 執(zhí)行號:108.
2、執(zhí)行全量備份
SQL> backup database full backupset '/data/dm/dmbak/fullbak';操作已執(zhí)行已用時間: 00:00:06.271. 執(zhí)行號:109.
3、假設此時出現(xiàn)故障,數(shù)據(jù)庫宕機
4、利用之前的全量備份進行還原
[dmdba@test bin]$ ./dmrman RMAN> restore database '/data/dm/data/DAMENG/dm.ini' from backupset '/data/dm/dmbak/fullbak'; restore database '/data/dm/data/DAMENG/dm.ini' from backupset '/data/dm/dmbak/fullbak';[Percent:100.00%][Speed:0.00M/s][Cost:00:00:03][Remaining:00:00:00] restore successfully.time used: 00:00:03.851
5、還原后恢復
[dmdba@test bin]$ ./dmrman RMAN> recover database '/data/dm/data/DAMENG/dm.ini' from backupset '/data/dm/dmbak/fullbak';recover database '/data/dm/data/DAMENG/dm.ini' from backupset '/data/dm/dmbak/fullbak';[Percent:100.00%][Speed:0.00PKG/s][Cost:00:00:00][Remaining:00:00:00] recover successfully!time used: 00:00:02.826
6、更新數(shù)據(jù)庫魔數(shù)
[dmdba@test bin]$ ./dmrman RMAN> recover database '/data/dm/data/DAMENG/dm.ini' update db_magic;recover database '/data/dm/data/DAMENG/dm.ini' update db_magic;recover successfully!time used: 00:00:01.159
7、啟動數(shù)據(jù)庫
/home/dmdba/dmdbms/bin/DmServiceDMSERVER_01 start
全備+增備還原恢復
此次情況主要模擬存在全量備份和增量備份的情況,如何恢復數(shù)據(jù)。例如每周日全備,其余時間增量備份的情形,該情況也是生產(chǎn)上使用最多的備份方案。
1、創(chuàng)建測試表
[dmdba@test bin]$ ./disqlSQL> drop table test;操作已執(zhí)行已用時間: 44.893(毫秒). 執(zhí)行號:105.SQL> create table test (a int );操作已執(zhí)行已用時間: 50.759(毫秒). 執(zhí)行號:106.SQL> insert into test values (1);影響行數(shù) 1已用時間: 2.066(毫秒). 執(zhí)行號:107.SQL> commit;操作已執(zhí)行已用時間: 24.325(毫秒). 執(zhí)行號:108.
2、執(zhí)行全量備份
SQL> backup database full backupset '/data/dm/dmbak/fullbak';操作已執(zhí)行已用時間: 00:00:06.271. 執(zhí)行號:109.
3、插入數(shù)據(jù)2后執(zhí)行增量備份
[dmdba@test bin]$ ./disqlSQL> insert into test values (2);影響行數(shù) 1已用時間: 2.945(毫秒). 執(zhí)行號:110.SQL> commit;操作已執(zhí)行已用時間: 5.231(毫秒). 執(zhí)行號:111.SQL> backup database increment backupset '/data/dm/dmbak/incbak_1';操作已執(zhí)行已用時間: 00:00:10.950. 執(zhí)行號:112.
4、假設此時出現(xiàn)故障,數(shù)據(jù)庫宕機
5、還原數(shù)據(jù)庫
[dmdba@test bin]$ ./dmrman RMAN> restore database '/data/dm/data/DAMENG/dm.ini' from backupset '/data/dm/dmbak/incbak_1'; recover database '/data/dm/data/DAMENG/dm.ini' from backupset '/data/dm/dmbak/incbak_1';[Percent:100.00%][Speed:0.00PKG/s][Cost:00:00:00][Remaining:00:00:00] recover successfully!time used: 00:00:02.663
6、恢復數(shù)據(jù)庫
[dmdba@test bin]$ ./dmrman RMAN> recover database '/data/dm/data/DAMENG/dm.ini' from backupset '/data/dm/dmbak/incbak_1'; recover database '/data/dm/data/DAMENG/dm.ini' from backupset '/data/dm/dmbak/incbak_1';[Percent:100.00%][Speed:0.00PKG/s][Cost:00:00:00][Remaining:00:00:00] recover successfully!time used: 00:00:02.663
7、更新數(shù)據(jù)庫魔數(shù)
[dmdba@test bin]$ ./dmrman RMAN> recover database '/data/dm/data/DAMENG/dm.ini' update db_magic;recover database '/data/dm/data/DAMENG/dm.ini' update db_magic;recover successfully!time used: 00:00:01.159
8、啟動數(shù)據(jù)庫
/home/dmdba/dmdbms/bin/DmServiceDMSERVER_01 start
全備+增備+歸檔還原恢復
1、創(chuàng)建測試表
[dmdba@test bin]$ ./disqlSQL> drop table test;操作已執(zhí)行已用時間: 44.893(毫秒). 執(zhí)行號:105.SQL> create table test (a int );操作已執(zhí)行已用時間: 50.759(毫秒). 執(zhí)行號:106.SQL> insert into test values (1);影響行數(shù) 1已用時間: 2.066(毫秒). 執(zhí)行號:107.SQL> commit;操作已執(zhí)行已用時間: 24.325(毫秒). 執(zhí)行號:108.
2、執(zhí)行全量備份
SQL> backup database full backupset '/data/dm/dmbak/fullbak';操作已執(zhí)行已用時間: 00:00:06.271. 執(zhí)行號:109.
3、插入數(shù)據(jù)2后執(zhí)行增量備份
[dmdba@test bin]$ ./disqlSQL> insert into test values (2);影響行數(shù) 1已用時間: 2.945(毫秒). 執(zhí)行號:110.SQL> commit;操作已執(zhí)行已用時間: 5.231(毫秒). 執(zhí)行號:111.SQL> backup database increment backupset '/data/dm/dmbak/incbak_1';操作已執(zhí)行已用時間: 00:00:10.950. 執(zhí)行號:112.
4、插入數(shù)據(jù)3,并查看時間
[dmdba@test bin]$ ./disqlSQL> insert into test values (3);影響行數(shù) 1已用時間: 1.990(毫秒). 執(zhí)行號:115.SQL> commit;操作已執(zhí)行已用時間: 4.966(毫秒). 執(zhí)行號:116.
5、假設此時出現(xiàn)故障,數(shù)據(jù)庫宕機
6、還原
[dmdba@test bin]$ ./dmrman RMAN> restore database '/data/dm/data/DAMENG/dm.ini' from backupset '/data/dm/dmbak/incbak_1' ; restore database '/data/dm/data/DAMENG/dm.ini' from backupset '/data/dm/dmbak/incbak_1';file dm.key not found, use default license![Percent:100.00%][Speed:0.00M/s][Cost:00:00:04][Remaining:00:00:00] restore successfully.time used: 00:00:04.413
7、恢復
[dmdba@test bin]$ ./dmrman RMAN> recover database '/data/dm/data/DAMENG/dm.ini' with archivedir '/data/dm/arch' ; recover database '/data/dm/data/DAMENG/dm.ini' with archivedir '/data/dm/arch';[Percent:100.00%][Speed:0.00PKG/s][Cost:00:00:00][Remaining:00:00:00] recover successfully!time used: 645.327(ms)
8、更新數(shù)據(jù)庫魔數(shù)
RMAN> recover database '/data/dm/data/DAMENG/dm.ini' update db_magic;recover database '/data/dm/data/DAMENG/dm.ini' update db_magic;recover successfully!time used: 00:00:01.159
9、啟動數(shù)據(jù)庫
/home/dmdba/dmdbms/bin/DmServiceDMSERVER_01 start

浙公網(wǎng)安備 33010602011771號