DM7使用DMRMAN執行資料庫還原和恢復

eric0435發表於2020-10-14

使用DMRMAN執行資料庫還原和恢復
下面介紹在資料檔案損壞後如何使用DMRMAN還原和恢復資料庫,主要內容包括:
1. 資料庫還原
2. 資料庫恢復

1. 資料庫還原
使用RESTORE命令完成離線還原操作,在還原語句中指定庫級備份集,可以是離線庫級備份集,或是聯機庫級備份集。資料庫的還原包括資料庫配置檔案還原和資料檔案還原,目前可能需要還原的資料庫配置檔案包括dm.ini、dm.ctl、伺服器秘鑰檔案(dm_service.private或者dm_external.config,若備份庫指定usbkey加密,則無秘鑰檔案)、聯機日誌檔案。語法如下:

RESTORE DATABASE <restore_type> FROM BACKUPSET '<備份集目錄>'
[DEVICE TYPE DISK|TAPE[PARMS '<介質引數>']]
[IDENTIFIED BY <密碼> [ENCRYPT WITH <加密演算法>]]
[WITH BACKUPDIR '<基備份集搜尋目錄>'{,'<基備份集搜尋目錄>'}]
[MAPPED FILE '<對映檔案>'][TASK THREAD <任務執行緒數>] [NOT PARALLEL]
[RENAME TO '<資料庫名>'];
<restore_type>::=<type1>|<type2>
<type1>::='<INI檔案路徑>'[REUSE DMINI][OVERWRITE]
<type2>::= TO '<system_dbf所在路徑>' [OVERWRITE]

DATABASE:指定還原庫目標的dm.ini檔案路徑。
BACKUPSET:指定用於還原目標資料庫的備份集目錄。若指定為相對路徑,會在預設備份目錄下搜尋備份集。
DEVICE TYPE:指儲存備份集的介質型別,支援DISK和TAPE,預設為DISK。DISK表示備份集儲存介質為磁碟,TAPE表示儲存介質為磁帶。
PARMS:介質引數,供第三方儲存介質(TAPE型別)管理使用。
IDENTIFIED BY:指定備份時使用的加密密碼,供還原過程解密使用。
ENCRYPT WITH:指定備份時使用的加密演算法,供還原過程解密使用,若未指定,則使用預設演算法。
WITH BACKUPDIR:指定備份集搜尋目錄。
MAPPED FILE:指定存放還原目標路徑的檔案,參見3.3.5.2.1 資料庫還原。當< 備份集目錄>和< 對映檔案>指定的路徑不一致時,以< 對映檔案>指定的路徑為主
TASK THREAD:指定還原過程中用於處理解壓縮和解密任務的執行緒個數。若未指定,則預設為4;若指定為0,則調整為1;若指定超過當前系統主機核數,則調整為主機核數。
NOT PARALLEL:指定並行備份集使用非並行方式還原。對於非並行備份集,不論是否指定該關鍵字,均採用非並行還原。
RENAME TO:指定還原資料庫後是否更改庫的名字,指定時將還原後的庫改為指定的資料庫名,預設使用備份集中的db_name作為還原後庫的名稱。

restore_type:
type1:
1>指定dm.ini還原,要求dm.ini中CTL_PATH必須配置正確,且內容有效;若配置CTL_PATH 檔案故障,且想利用dm.ini最佳化配置,則可選擇type2還原後,用指定dm.ini覆蓋還原後dm.ini,並修改CTL_PATH為當前控制檔案路徑即可;
2>除dm.ini檔案外,其他檔案均可不存在;但dm.ini引數配置必須正確,且配置的dm.ctl檔案必須是有效的控制檔案;
3>資料庫配置檔案中除已經存在的dm.ini外,先刪除控制檔案中的資料檔案,然後根據overwrite選項,若指定overwrite,其他檔案(這些檔案不在控制檔案中,所以未刪除)均採用刪除重建的處理,避免存在非法的檔案,否則如果這些檔案已經存在,則報錯;
4>若指定REUSE DMINI,則會將備份集中備份的dm.ini中除路徑相關的INI引數外,均複製到當前dm.ini上。

type2:
1>所有檔案均可不在,system_dbf所在路徑需為有效路徑,若不存在,restore過程中會自動建立;
2>所有前面提到到資料庫配置檔案均會在指定的system_dbf所在路徑還原,但非單機環境中相關其他檔案均不修改或者重建,如MPP中dmmpp.ini、dmmal.ini等;
3>若未指定OVERWRITE,若system_dbf所在路徑中存在待還原的庫配置檔案,則報錯;若指定,則將已經存在的檔案刪除重建;
4>由於RAC環境中dm.ini可能存在多個,且可能不在一個主庫上,或者即使在一個主庫上也可能不在system_dbf所在路徑中,故暫時不支援RAC環境的指定目錄還原。

聯機日誌
上述和中的還原後的聯機日誌檔案至少會有兩個,因為源庫中的日誌檔案可能大於等於兩個,如果小於兩個(被誤刪的情況)的則補齊為兩個。已經存在的聯機日誌配置,使用原路徑,若檔案大小非法,則使用預設大小256M重建;缺少的使用預設命名和預設大小256M重建。聯機日誌檔案的命名規則:
1>單機:db_name+(file_id+1).log,其中fil_id + 1,佔2個位置,如:db_name=DAMENG,則相應的名稱為DAMENG01.log,DAMENG02.log;
2>RAC: rac+(ep_no + 1)_+(file_id+1).log,其中ep_no + 1和file_id+1均佔2個位置,如0號節點日誌名稱為rac01_01.log,rac01_02.log。

使用說明:
透過RESTORE命令還原後的資料庫不可用,需進一步執行RECOVER命令,將資料庫恢復到備份結束時的狀態。資料庫備份集分為聯機和離線兩種型別。通常情況下,使用者會在聯機的情況下備份資料庫,因此下面以聯機資料庫備份為例說明使用DMRMAN如何執行資料庫還原操作。
1) 聯機備份資料庫,保證資料庫執行在歸檔模式及OPEN狀態。

SQL> backup database '/dm7/data/rac0_config/dm.ini' full to db_rac_full_bak_for_restore backupset '/dm7/backup/db_rac_full_bak_for_restore';
executed successfully
used time: 00:00:01.233. Execute id is 4.

2) 準備目標庫。還原目標庫可以是已經存在的資料庫,也可使用dminit工具初始化一個新庫。如下所示:

./dminit path=/opt/dmdbms/data db_name=DAMENG_FOR_RESTORE

如果還原目標庫與故障庫是同一個,建議先執行故障庫的歸檔修復操作。

3) 校驗備份,校驗待還原備份集的合法性。校驗備份有兩種方式,聯機和離線,此處使用離線校驗。

RMAN> check backupset '/dm7/backup/db_rac_full_bak_for_restore';
check backupset '/dm7/backup/db_rac_full_bak_for_restore';
CMD END.CODE:[0]
check backupset successfully.
time used: 12.182(ms)
也可以
SQL> select sf_bakset_check('disk','/dm7/backup/db_rac_full_bak_for_restore');
LINEID     SF_BAKSET_CHECK('disk','/dm7/backup/db_rac_full_bak_for_restore')
---------- -----------------------------------------------------------------
1          1
used time: 14.626(ms). Execute id is 6.

4) 還原資料庫。啟動DMRMAN,輸入以下命令:

RMAN> restore database '/dm7/data/rac0_config/dm.ini' from backupset '/dm7/backup/db_rac_full_bak_for_restore';
restore database '/dm7/data/rac0_config/dm.ini' from backupset '/dm7/backup/db_rac_full_bak_for_restore';
file dm.key not found, use default license!
checking if the RAC database under system path [+DMDATA/data/rac] is running....
EP [0] is checking....
[-12000]:The specified instance has been started

需要停止例項

[dmdba@dmrac1 bin]$ dmrman dcr_ini=/dm7/data/dmdcr.ini
dmrman V7.1.6.46-Build(2018.02.08-89107)ENT
RMAN> restore database '/dm7/data/rac0_config/dm.ini' from backupset '/dm7/backup/db_rac_full_bak_for_restore';
restore database '/dm7/data/rac0_config/dm.ini' from backupset '/dm7/backup/db_rac_full_bak_for_restore';
file dm.key not found, use default license!
checking if the RAC database under system path [+DMDATA/data/rac] is running....
EP [0] is checking....
EP [1] is checking....
RESTORE DATABASE  CHECK......
RESTORE DATABASE , dbf collect......
RESTORE DATABASE , dbf refresh ......
RESTORE BACKUPSET [/dm7/backup/db_rac_full_bak_for_restore] START......
total 5 packages processed...
RESTORE DATABASE , UPDATE ctl file......
RESTORE DATABASE , REBUILD key file......
RESTORE DATABASE , CHECK db info......
RESTORE DATABASE , UPDATE db info......
total 9 packages processed!
CMD END.CODE:[0]
restore successfully.
time used: 12542.797(ms)

2. 資料庫恢復

RMAN> recover database '/dm7/data/rac0_config/dm.ini';
recover database '/dm7/data/rac0_config/dm.ini';
checking if the RAC database under system path [+DMDATA/data/rac] is running....
EP [0] is checking....
EP [1] is checking....
EP[0] max_lsn: 72473
EP[0] adjust cur_lsn from [72473] to [73980]
EP 0's ckpt_lsn = 72474
min_ckpt_lsn = 72474
The RAC redo archive log 1 ptx
The RAC redo archive log 2 ptx
The RAC redo archive log 3 ptx
The RAC redo archive log 4 ptx
The RAC redo archive log 5 ptx
The RAC redo archive log 6 ptx
The RAC redo archive log 7 ptx
The RAC redo archive log 8 ptx
The RAC redo archive log 9 ptx
The RAC redo archive log 10 ptx
The RAC redo archive log 11 ptx
The RAC redo archive log 12 ptx
The RAC recover total redo 12 ptx
EP(0) slot ctl page(1, 0, 16) trxid = 9882
EP(1) slot ctl page(1, 0, 17) trxid = 8457
EP[0] Recover LSN from 72474 to 73970.
EP[1] Recover LSN from 73981 to 73980.
Recover from archive log finished, time used:0.029s.
recover successfully!
time used: 3246.961(ms)

啟動例項

[root@dmrac1 backup]# service DmServicerac1 start
Starting DmServicerac1: [ OK ]
[root@dmrac2 init.d]# service DmServicerac2 start
Starting DmServicerac2: [ OK ]

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26015009/viewspace-2726768/,如需轉載,請註明出處,否則將追究法律責任。

相關文章