恢復之丟失全部控制檔案以及備份中的控制檔案

zhengbao_jun發表於2009-02-11

如果控制檔案全部丟失,且沒有控制檔案的備份,則只能通過CREATE CONTROLFILE命令來重建控制檔案。


利用這種CREATE CONTROLFILE的方式重建控制檔案不需要使用RESETLOGS方式開啟資料庫。

如果在最後一次資料庫結構修改後使用了ALTER DATABASE BACKUP CONTROLFILE TO TRACE NORESETLOGS命令備份了建立控制檔案的指令碼,則可以直接用TRACE檔案中的指令碼進行控制檔案的重建。

如果使用ALTER DATABASE BACKUP CONTROLFILE TO TRACE NORESETLOGS命令之後又進行了資料庫結構的修改,則需要手工編輯TRACE檔案中的指令碼,來反映出資料庫最後的修改。

如果是使用的ALTER DATABASE BACKUP CONTROLFILE TO FILENAME方式進行的備份(這種情況其實應該算作有備份的情況,不過如果利用備份進行恢復需要使用RESETLOGS方式開啟資料庫),則可以利用備份的控制檔案首先將資料庫STARTUP MOUNT,然後再利用ALTER DATABASE BACKUP CONTROLFILE TO TRACE NORESETLOGS命令備份建立控制檔案的指令碼,最後將備份控制檔案後所有資料庫結構的修改,反映到控制檔案的指令碼上。

如果控制檔案沒有任何方式的備份,那麼只能通過手工方式編寫CREATE CONTROLFILE語句,這時候需要了解所有資料檔案和聯機重做日誌檔案的位置和大小。

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" NORESETLOGS ARCHIVELOG
2 -- SET STANDBY TO MAXIMIZE PERFORMANCE
3 MAXLOGFILES 50
4 MAXLOGMEMBERS 5
5 MAXDATAFILES 100
6 MAXINSTANCES 1
7 MAXLOGHISTORY 226
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:ORACLEORADATATESTUSERS02.DBF',
19 'F:ORACLEORADATATESTYANGTK01.DBF'
20 CHARACTER SET ZHS16GBK
21 ;

控制檔案已建立

SQL> RECOVER DATABASE
ORA-00283: ??????????
ORA-00264: ?????


SQL> ALTER SYSTEM ARCHIVE LOG ALL;

系統已更改。

SQL> ALTER DATABASE OPEN;

資料庫已更改。

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

表空間已更改。

上面RECOVER DATABASE步驟的錯誤描述資訊是資料庫不需要恢復。因此,直接忽略這個錯誤。

需要注意的是,這個方法適用於聯機重做日誌存在情況下的恢復。

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

相關文章