資料庫resetlogs後進行rman恢復6

tonglei2000發表於2013-08-03
和一哥們聊,rman可以把以前的備份集加到控制檔案裡面去。
那我這個問題不就很簡單解決了嗎。
檢視資料,rman裡面,catalog命令可以,摘抄網上的文章
在9i時代,如果在控制檔案或者catalog資料庫中的備份資訊被覆蓋或者清除,那麼即使所有的備份檔案都在,rman也無法簡單的利用這些檔案來做恢復了,必須得用些特別的方法才能辦到,比如以前很多牛人寫的使用dbms_backup_restore包從備份片中釋放出資料檔案,然後再使用手工方式做恢復。
 但是實際上,oracle完全可以將恢復時需要的一些資訊儲存在備份檔案的檔案頭中,如果控制檔案或者catalog資料庫中的資訊丟失,再掃描一遍檔案頭,取出這些資訊就可以了。10g中就是這麼實現的,掃描這些檔案頭的工作就是由這個新的catalog命令來實現的。注意這是10g rman的一個命令,雖然和以前的catalog database的名字長得一樣,可不是同一個東西。
 catalog命令可以用來掃描備份片,檔案複製(datafile or controlfile copy),也可以用來掃描歸檔日誌,所以,只要你的備份還在,歸檔還在,即使catalog database崩潰,控制檔案重建,照樣可以用這些備份來做恢復。
 掃描備份片
 CATALOG BACKUPPIECE ‘?/oradata/01dmsbj4_1_1.bcp’;
掃描歸檔日誌
 CATALOG ARCHIVELOG ‘?/oradata/archive1_30.dbf’, ‘?/oradata/archive1_31.dbf’;
掃描資料檔案複製,並且將其做為增量備份的level 0
 CATALOG DATAFILECOPY ‘?/oradata/users01.bak’ LEVEL 0;
掃描控制檔案複製
 CATALOG CONTROLFILECOPY ‘controlfilecopy.ctl’
掃描整個目錄,如果備份片或者歸檔日誌檔案太多,可以放到一個目錄中,一次性掃描就行
 CATALOG START WITH ‘/tmp/arch_logs’;
掃描閃回恢復區
 CATALOG RECOVERY AREA NOPROMPT;
這裡需要注意將備份的log和備份檔案一起儲存下來,不然就不知道哪些檔案屬於哪個備份集,恢復的時候就要多浪費些時間啦。但是注意這些命令是有限制的,其中的一個限制是不能註冊備份檔案到不同的資料庫:
 You cannot use CATALOG to catalog a file that belongs to a different database.
 也就是說你至少還需要原資料庫的控制檔案。
 
 
 
restore以後,要有backup controlfile恢復,同樣摘抄網上的文章
 
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
ITPUB個人空間 \6C+L-K3}+m
 如果丟失當前控制檔案,用冷備份的控制檔案恢復的時候,用來告訴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”
I而某些情況下,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)丟失情況下,則可以恢復到丟失的前一個歸檔日誌
 

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

相關文章