一、 損壞單個控制文件 損壞單個控制文件是比較輕易恢復的,因為一般的數據庫系統,控制文件都不是一個,而且所有的控制文件都互為鏡相,只要拷貝一個好的控制文件替換壞的控制文件就可以了。 1、控制文件損壞,最典型的就是啟動數據庫出錯,不能mount數據庫 SQL>startup ORA-00205: error in identifying controlfile, check alert log for more info 查看報警日志文件,有如下信息 alter database mount Mon May 26 11:59:52 2003 ORA-00202: controlfile: 'D:Oracleoradatachencontrol01.ctl' ORA-27041: unable to open file OSD-04002: unable to open file O/S-Error: (OS 2) 系統找不到指定的文件。 2、停止數據庫 SQL>shutdown immediate 3、拷貝一個好的控制文件替換壞的控制文件或修改init.ora中的控制文件參數,取消這個壞的控制文件。 4、重新啟動數據 SQL>startup 說明: 1、損失單個控制文件是比較簡單的,因為數據庫中所有的控制文件都是鏡相的,只需要簡單的拷貝一個好的就可以了 2、建議鏡相控制文件在不同的磁盤上 3、建議多做控制文件的備份,長期保留一份由alter database backup control file to trace產生的控制文件的文本備份 二、 損壞全部控制文件 損壞多個控制文件,或者人為的刪除了所有的控制文件,通過控制文件的復制已經不能解決問題,這個時候需要重新建立控制文件。同時注重,alter database backup control file to trace可以產生一個控制文件的文本備份。 以下是具體重新創建控制文件的步驟 1、關閉數據庫 SQL>shutdown immediate;
2、刪除所有控制文件,模擬控制文件的丟失 3、啟動數據庫,出現錯誤,并不能啟動到mount下 SQL>startup ORA-00205: error in identifying controlfile, check alert log for more info 查看報警日志文件,有如下信息 alter database mount Mon May 26 11:53:15 2003 ORA-00202: controlfile: 'D:Oracleoradatachencontrol01.ctl' ORA-27041: unable to open file OSD-04002: unable to open file O/S-Error: (OS 2) 系統找不到指定的文件。 4、關閉數據庫 SQL>shutdown immediate; 5、在internal或sys下運行如下創建控制文件的腳本,注重完整列出聯機日志或數據文件的路徑,或修改由alter database backup control file to trace備份控制文件時產生的腳本,去掉多余的注釋即可。 STARTUP NOMOUNT CREATE CONTROLFILE REUSE DATABASE "TEST" NORESETLOGS NOARCHIVELOG MAXLOGFILES 32 MAXLOGMEMBERS 2 MAXDATAFILES 254 MAXINSTANCES 1 MAXLOGHISTORY 226 LOGFILE GROUP 1 'D:ORACLEORADATATESTREDO01.LOG' SIZE 1M, GROUP 2 'D:ORACLEORADATATESTREDO02.LOG' SIZE 1M, GROUP 3 'D:ORACLEORADATATESTREDO03.LOG' SIZE 1M DATAFILE 'D:ORACLEORADATATESTSYSTEM01.DBF', 'D:ORACLEORADATATESTRBS01.DBF', 'D:ORACLEORADATATESTUSERS01.DBF', 'D:ORACLEORADATATESTTEMP01.DBF', 'D:ORACLEORADATATESTTOOLS01.DBF', 'D:ORACLEORADATATESTINDX01.DBF' CHARACTER SET ZHS16GBK; -- Recovery is required if any of the datafiles are restored backups, -- or if the last shutdown was not normal or immediate. RECOVER DATABASE --if the last shutdown was not normal or immediate --noarchive -- RECOVER DATABASE UNTIL CANCEL USING BACKUP CONTROLFILE --archive -- RECOVER DATABASE USING BACKUP CONTROLFILE UNTIL CANCEL -- Database can now be opened normally. ALTER DATABASE OPEN; --if recover database until cancel --ALTER DATABASE OPEN RESETLOGS; 6、假如沒有錯誤,數據庫將啟動到open狀態下。 說明: 1、重建控制文件用于恢復全部控制文件的損壞,需要注重其書寫的正確性,保證包含了所有的數據文件與聯機日志 2、經常有這樣一種情況,因為一個磁盤損壞,我們不能再恢復(store)數據文件到這個磁盤,因此在store到另外一個盤的時候,我們就必須重新創建控制文件,用于識別這個新的數據文件,這里也可以用這種方法用于恢復。