恢復之利用備份在所有控制檔案丟失情況下恢復(二)

zhengbao_jun發表於2009-02-11

控制檔案全部丟失的情況下,根據聯機重做日誌檔案是否可用和資料檔案是否是最新的可以分為四種不同情況,這篇文章描述的是,資料檔案是最新的,但是聯機重做日誌不可用的情況。


由於聯機重做日誌不可用,因此無法利用備份的控制檔案進行恢復,而只能通過重建控制檔案的方法。

如果利用歸檔的控制檔案進行恢復,會發現在應用所有歸檔的重做日誌之後,資料庫仍然無法正常開啟,資料庫仍然需要聯機日誌進行恢復。因此,這種情況必須通過重建控制檔案來完成。

SQL> CONN /@TEST AS SYSDBA
已連線。
SQL> SHUTDOWN IMMEDIATE
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE 例程已經關閉。
SQL> HOST DEL F:ORACLEORADATATEST*.CTL

SQL> HOST DEL F:ORACLEORADATATEST*.LOG

上面模擬了資料庫正常關閉,丟失全部控制檔案和全部日誌檔案的情況。

SQL> STARTUP NOMOUNT
ORACLE 例程已經啟動。

Total System Global Area 76619308 bytes
Fixed Size 454188 bytes
Variable Size 50331648 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
SQL> CREATE CONTROLFILE REUSE DATABASE "TEST" RESETLOGS ARCHIVELOG
2 -- SET STANDBY TO MAXIMIZE PERFORMANCE
3 MAXLOGFILES 50
4 MAXLOGMEMBERS 5
5 MAXDATAFILES 100
6 MAXINSTANCES 1
7 MAXLOGHISTORY 680
8 LOGFILE
9 GROUP 1 'F:ORACLEORADATATESTREDO01.LOG' SIZE 100M,
10 GROUP 2 'F:ORACLEORADATATESTREDO02.LOG' SIZE 100M,
11 GROUP 3 'F:ORACLEORADATATESTREDO03.LOG' SIZE 100M
12 -- STANDBY LOGFILE
13 DATAFILE
14 'F:ORACLEORADATATESTSYSTEM01.DBF',
15 'F:ORACLEORADATATESTUNDOTBS01.DBF',
16 'F:ORACLEORADATATESTINDX01.DBF',
17 'F:ORACLEORADATATESTTOOLS01.DBF',
18 'F:ORACLEORADATATESTUSERS01.DBF',
19 'F:ORACLEORADATATESTYANGTK01.DBF'
20 CHARACTER SET ZHS16GBK
21 ;

控制檔案已建立

SQL> ALTER DATABASE OPEN RESETLOGS;

資料庫已更改。

可以利用以前備份到trace檔案的重建控制檔案指令碼進行恢復,如果沒有trace檔案,則只能自己根據資料檔案和重做日誌檔案的位置手工編輯重建控制檔案的指令碼。

重建控制檔案後使用RESETLOGS方式開啟即可。

最後將TEMP資料檔案新增上。

SQL> ALTER TABLESPACE TEMP ADD TEMPFILE 'F:ORACLEORADATATESTTEMP01.DBF'
2 SIZE 41943040 REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M;

表空間已更改。

恢復結束,這時需要馬上進行備份。

注意,這種情況的恢復要求資料庫必須是正常關閉。如果資料庫是以ABORT方式關閉,則需要進行資料庫的不完全恢復。

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

相關文章