【轉】 oracle備份恢復之recover database的四條語句區別

ewelamb發表於2013-08-09

1  recover database using backup controlfile
2  recover database until cancel
3  recover database using backup controlfile until cancel;
4  recover database until cancel using backup controlfile;

本文主要介紹以下四種恢復方式的含義與區別:
 
1. recover database using backup controlfile

 如果丟失當前控制檔案,用冷備份的控制檔案恢復的時候,用來告訴oracle,不要以controlfile中的scn作為恢復的終點;
 
2. recover database until cancel
 
如果丟失current/active redo的時候,手動指定終點。
 
3. recover database using backup controlfile until cancel;
 
 如果丟失當前controlfile並且current/active redo都丟失,會先去自動應用歸檔日誌,可以實現最大的恢復;
 
4. recover database until cancel using backup controlfile;
 
 如果丟失當前controlfile並且current/active redo都丟失,以舊的redo中的scn為恢復終點。因為沒有應用歸檔日誌,所有會丟失資料。 
要理解recover database using backup controlfile,先理解 recover database,也就是說,不加using backup controlfile的情況。
在普通的recover database 或者 recover tablespace, recover datafile時, Oracle會以當前controlfile所紀錄的SCN為準,利用archive log和 redo log的redo entry, 把相關的datafile 的 block恢復到“當前controlfile所紀錄的SCN”
而某些情況下,Oracle需要把資料恢復到比當前controlfile所紀錄的SCN還要靠後的位置(比如說,control file是backup controlfile , 或者 controlfile是根據trace create的。),這時候,就需要用using backup controlfile.   恢復就不會受“當前controlfile所記錄的SCN”的限制。這時候的限制就來自於你的語句(until time , until scn),或者可用的archive log(until cancel) ...

結果如下:
如果控制檔案丟失,restore備份的控制檔案後,則必須使用using backup controlfile選項。而until cancel則是不完全恢復,即current/active redo丟失,或者從restore資料庫後某個歸檔檔案缺失,則終止。

結論:
1、適用於restore舊的控制檔案,且歸檔日誌和cuurrent/active redo都沒有丟失情況。如果一切歸檔日誌和線上日誌完好,可以不丟失資料。類似於recover database
2、當前控制檔案未丟失(不需要restore舊的控制檔案),此時有歸檔日誌或者current/active log有丟失情況下,則終止。最大可能恢復資料
3、4:我在oracle 10.2.0.4環境下測試效果是相同的,即適用於restore舊的控制檔案,在恢復到控制檔案備份那刻後,系統會提示應用控制檔案備份後的歸檔日誌,如果沒有則停止。也是最大可能的恢復資料。

可以得出結果,如果有舊的資料庫備份,在歸檔日誌和線上日誌全部儲存完好的情況下,使用recover database或recover database using backup controlfile。則不丟失資料
如果存在備份資料檔案restore後,歸檔日誌或者線上日誌(active、current)丟失情況下,則可以恢復到丟失的前一個歸檔日誌

 

until cancel就是不完全恢復
需要alter database open resetlogs
資料庫開啟後需要理解做一個全庫備份

 

線上日誌檔案丟失:

如果正常關閉資料庫,然後啟動時報錯:

SQL> alter database open;
alter database open
*
第 1 行出現錯誤:
ORA-00313: 無法開啟日誌組 1 (用於執行緒 1) 的成員
ORA-00312: 聯機日誌 1 執行緒 1:
'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO01.LOG'


SQL> alter database open resetlogs;
alter database open resetlogs
*
第 1 行出現錯誤:
ORA-01139: RESETLOGS 選項僅在不完全資料庫恢復後有效


SQL> recover database until cancel;
完成介質恢復。
SQL> alter database open resetlogs;

資料庫已更改。

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

相關文章