達夢7備份與還原
前言
本文檔介紹了達夢7的備份與還原相關操作。詳細的文檔,可以查看達夢安裝目錄下的文件doc/special/DM7備份與還原.pdf
基礎概念
備份集
這個概念頻繁出現在文檔和命令中,一定要先熟悉。
備份集用來存放備份過程中產生的備份數據及備份信息。一個備份集對應了一次完整的備份*。 一般情況下, 一個備份集就是一個目錄, 備份集包含一個或多個備份片文件,以及一個備份元數據文件。
下圖展示了一個備份集
# tree db_full_2020_02_25
db_full_2020_02_25
├── db_full_2020_02_25_1.bak (redo日志備份)
├── db_full_2020_02_25.bak (數據頁文件)
└── db_full_2020_02_25.meta (元數據)
邏輯備份和物理備份
-
邏輯備份就是將指定對象(庫級、模式級、表級)的數據導出到
文件的備份方式。 邏輯備份針對的是數據內容,並不關心這些數據物理存儲在什么位置。 -
物理備份則直接掃描數據庫文件,找出那些已經分配、使用的數據頁,拷貝並保存到備份集中。物理備份過程中,不關心數據頁的具體內容是什么,也不關心數據頁屬於哪一張表,只是簡單的根據數據庫文件系統的描述,來挑選有效的數據頁。
本文只涉及物理備份
聯機備份與脫機備份
顧名思義,就是備份的時候數據庫實例是否正常在線,可以分為聯機備份和脫機備份。
由於數據庫無時無刻不在工作,為了保證備份的完整性,在備份的時候,關閉數據庫實例就可以保證備份期間數據的完整性和一致性。
但是如果每次備份都要關閉數據庫實例,在多數線上場景並不可行。在聯機備份時,可能存在一些處於活動狀態的事務正在執行,為確保備份數據的一致性,需要將備份期間產生的 REDO 日志一起備份。 因此,只能在配置本地歸檔、並開啟本地歸檔的數據庫上執行聯機備份。
使用DMRMAN脫機備份與還原
對於脫機備份,首選DMRMAN
工具,DMRMAN(DM RECOVERY MANEGER)是 DM7 的脫機備份還原管理工具,由它來統一負責庫級脫機備份、脫機還原、數據庫恢復等相關操作,該工具支持命令行指定參數方式和控制台交互方式執行,降低了用戶的操作難度。
要點:
-
dmap服務一定要啟動
-
執行dmrman一定要使用數據庫的所有者用戶,不能是root
使用前准備工作
cd $DM_HOME/bin
./dmap
使用dmrman必須確保dmap服務啟動
啟動dmrman交互式控制台
su dmdba (這里按照實際的數據庫用戶切換)
cd $DM_HOME/bin
./dmrman
執行備份動作
dmrman V7.6.0.209-Build(2019.10.25-114655)ENT
RMAN> BACKUP DATABASE'/opt/dmdbms/data/DAMENG/dm.ini';
BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini';
checking if the database under system path [/opt/dmdbms/data/DAMENG] is running...[4].
checking if the database under system path [/opt/dmdbms/data/DAMENG] is running...[3].
the database under system path [/opt/dmdbms/data/DAMENG] is running.
我們可以看到,上述命令出現錯誤,因為數據庫實例沒有關閉
systemctl stop DmServiceGSDOA.service
重新執行備份命令
dmrman V7.6.0.209-Build(2019.10.25-114655)ENT
RMAN> BACKUP DATABASE'/opt/dmdbms/data/DAMENG/dm.ini';
BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini';
checking if the database under system path [/opt/dmdbms/data/DAMENG] is running...[4].
checking if the database under system path [/opt/dmdbms/data/DAMENG] is running...[3].
checking if the database under system path [/opt/dmdbms/data/DAMENG] is running...[2].
checking if the database under system path [/opt/dmdbms/data/DAMENG] is running...[1].
checking if the database under system path [/opt/dmdbms/data/DAMENG] is running...[0].
checking if the database under system path [/opt/dmdbms/data/DAMENG] is running, write dmrman info.
EP[0] max_lsn: 12895683
BACKUP DATABASE [DAMENG],execute......
CMD CHECK LSN......
BACKUP DATABASE [DAMENG],collect dbf......
CMD CHECK ......
DBF BACKUP SUBS......
total 1 packages processed...
total 3 packages processed...
total 4 packages processed...
total 7 packages processed...
total 8 packages processed...
total 30 packages processed...
total 52 packages processed...
DBF BACKUP MAIN......
BACKUPSET [/opt/dmdbms/data/DAMENG/bak/DB_DAMENG_FULL_20200225_110522_000950] END, CODE [0]......
META GENERATING......
total 56 packages processed...
total 56 packages processed!
CMD END.CODE:[0]
backup successfully!
time used: 30721.841(ms)
dmap啟動失敗怎么辦
刪除 dmap 同目錄下的文件
rm -rf DM_PIPE_DMAP*
執行還原動作
假設我們要還原的數據庫為:/opt/dmdbms/dd/gck/dm.ini
,備份集目錄在:/tmp/DB_FULL_2020_01_17
先執行 restore
RMAN> RESTORE DATABASE '/opt/dmdbms/dd/gck/dm.ini' FROM BACKUPSET '/tmp/DB_FULL_2020_01_17';
RESTORE DATABASE '/opt/dmdbms/dd/gck/dm.ini' FROM BACKUPSET '/tmp/DB_FULL_2020_01_17';
checking if the database under system path [/opt/dmdbms/dd/gck] is running...[4].
checking if the database under system path [/opt/dmdbms/dd/gck] is running...[3].
checking if the database under system path [/opt/dmdbms/dd/gck] is running...[2].
checking if the database under system path [/opt/dmdbms/dd/gck] is running...[1].
checking if the database under system path [/opt/dmdbms/dd/gck] is running...[0].
checking if the database under system path [/opt/dmdbms/dd/gck] is running, write dmrman info.
RESTORE DATABASE CHECK......
RESTORE DATABASE,dbf collect......
RESTORE DATABASE,dbf refresh ......
RESTORE BACKUPSET [/tmp/DB_FULL_2020_01_17/DB_FULL_2020_01_17_0] START......
total 1 packages processed...
RESTORE BACKUPSET [/tmp/DB_FULL_2020_01_17/DB_FULL_2020_01_17_3] START......
total 1 packages processed...
RESTORE BACKUPSET [/tmp/DB_FULL_2020_01_17/DB_FULL_2020_01_17_1] START......
total 3 packages processed...
RESTORE BACKUPSET [/tmp/DB_FULL_2020_01_17/DB_FULL_2020_01_17_2] START......
total 6 packages processed...
RESTORE DATABASE,UPDATE ctl file......
RESTORE DATABASE,REBUILD key file......
RESTORE DATABASE,CHECK db info......
RESTORE DATABASE,UPDATE db info......
total 29 packages processed!
CMD END.CODE:[0]
restore successfully.
time used: 15222.155(ms)
再執行recover
RMAN> RECOVER DATABASE '/opt/dmdbms/dd/gck/dm.ini' FROM BACKUPSET '/tmp/DB_FULL_2020_01_17';
RECOVER DATABASE '/opt/dmdbms/dd/gck/dm.ini' FROM BACKUPSET '/tmp/DB_FULL_2020_01_17';
checking if the database under system path [/opt/dmdbms/dd/gck] is running...[4].
checking if the database under system path [/opt/dmdbms/dd/gck] is running...[3].
checking if the database under system path [/opt/dmdbms/dd/gck] is running...[2].
checking if the database under system path [/opt/dmdbms/dd/gck] is running...[1].
checking if the database under system path [/opt/dmdbms/dd/gck] is running...[0].
checking if the database under system path [/opt/dmdbms/dd/gck] is running, write dmrman info.
EP[0] max_lsn: 461621
RESTORE RLOG CHECK......
RESTORE RLOG ,gen tmp file......
RESTORE RLOG FROM BACKUPSET [/tmp/DB_FULL_2020_01_17] START......
total 0 packages processed...
total 2 packages processed!
CMD END.CODE:[0]
EP[0] Recover LSN from 461622 to 461790.
Recover from archive log finished, time used:0.076s.
recover successfully!
time used: 7028.527(ms)