控制檔案丟失處理方法

531968912發表於2016-06-12
控制檔案損壞可能導致資料庫例項故障,因此DBA 必須掌握控制檔案損壞的處理方法。單
個控制檔案損壞是比較容易恢復的,因為一般的資料庫系統,控制檔案都不止一個,而且所有的
控制檔案都互為映象,只要複製一個完好的控制檔案替換已損壞的控制檔案就可以了。控制檔案
損壞所導致的最典型的問題就是啟動資料庫出錯,不能載入資料庫。
SQL>startup
ORA-00205: error in identifying controlfile, check alert log for more info
檢視報警日誌檔案,有如下資訊:
alter database mount
Mon May 14 13:59:51 2010
ORA-00202: controlfile: 'D:\oracle\oradata\orcl\control01.ctl'
ORA-27041: unable to open file
OSD-04002: unable to open file
O/S-Error: (OS 2) 系統找不到指定的檔案。
遇到這種情況,需要首先關閉資料庫例項。
SQL>shutdown abort
由於資料庫根本就沒有載入,所以shutdown abort 是十分安全的。關閉資料庫例項後,需要
複製一個完好的控制檔案替換已損壞的控制檔案,或修改init.ora 中的控制檔案引數,取消已損
壞的控制檔案,然後重啟資料庫。
恢復單個控制檔案是比較簡單的,因為資料庫中所有的控制檔案都是映象的,只需要簡單地
複製、替換就可以了。這也是我們建議在不同磁碟上映象控制檔案的主要原因,如果磁碟故障導
致了某個控制檔案損壞,只要還有一個控制檔案是完好的,就可以進行恢復。
如果所有的控制檔案都損壞了怎麼辦呢?這種情況下,就需要使用備份的控制檔案了。如果
比較幸運,系統有備份,那麼只要將備份取出,就可以恢復了。基於這樣的原因,老白建議多做
控制檔案的備份,長期保留一份由ALTER DATABASE BACKUP CONTROL FILE TO TRACE 產
生的控制檔案的文字備份(每次新增資料檔案後都重新備份一次)。
上面我們討論的是一些比較理想的場景。在某些情況下,我們可能不夠走運,當有多個控制
檔案損壞了,或者人為刪除了所有的控制檔案,透過控制檔案的複製已經不能解決問題時,就需
要重新建立控制檔案。同時應注意,ALTER DATABASE BACKUP CONTROL FILE TO TRACE
可以產生一個控制檔案的文字備份。
以下是重新建立控制檔案的詳細步驟。
(1) 關閉資料庫。
SQL>shutdown immediate;
(2) 刪除所有控制檔案,模擬控制檔案丟失。
(3) 啟動資料庫,出現錯誤,且不能啟動到載入狀態下。
SQL>startup
ORA-00205: error in identifying controlfile, check alert log for more info
檢視報警日誌檔案,有如下資訊:
SQL>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) 如果沒有錯誤,資料庫將啟動到開啟狀態下。
上面介紹了重建控制檔案的方法。重建控制檔案用於恢復全部控制檔案的損壞,需要注意其
書寫的正確性,保證包含了所有的資料檔案與聯機日誌。我們在啟動資料庫之前,一定要確保所
有的資料檔案都已經被包含在重建的控制檔案指令碼中了。如果在編輯過程中誤刪了某個檔案,當
資料庫開啟後,要想再將其加入到資料庫中,就需要恢復這個資料檔案,否則無法使該資料檔案
處於線上狀態。但如果丟失了歸檔日誌,這個檔案可能就無法再次加入到資料庫中了。
在做資料庫恢復時,我們經常會碰到這樣一種情況:因為某個磁碟損壞了,不能再恢復或存
儲資料檔案到這個磁碟,而在儲存到其他磁碟時,就必須重新建立控制檔案,用於識別這個新的
資料檔案。這時也可以用上述方法進行恢復。
下面來看一個更為極端的情況:丟失了所有的控制檔案及備份控制檔案,同時沒有儲存記錄
檔案。這種情況下該如何處理呢?比較麻煩,我們需要根據系統中的檔案或者裸裝置,手工編寫
建立控制檔案的命令。當然,也可以從其他類似的系統中複製一份檔案來改寫。只要足夠仔細,
沒有遺漏任何檔案,也可以達到目的。無論我們是否採用這種最為極端的方式來解決問題,老白
都希望大家把工作做在前面,儘可能避免以這種方式來進行恢復。

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

相關文章