控制檔案丟失處理方法
控制檔案損壞可能導致資料庫例項故障,因此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) 如果沒有錯誤,資料庫將啟動到開啟狀態下。
上面介紹了重建控制檔案的方法。重建控制檔案用於恢復全部控制檔案的損壞,需要注意其
書寫的正確性,保證包含了所有的資料檔案與聯機日誌。我們在啟動資料庫之前,一定要確保所
有的資料檔案都已經被包含在重建的控制檔案指令碼中了。如果在編輯過程中誤刪了某個檔案,當
資料庫開啟後,要想再將其加入到資料庫中,就需要恢復這個資料檔案,否則無法使該資料檔案
處於線上狀態。但如果丟失了歸檔日誌,這個檔案可能就無法再次加入到資料庫中了。
在做資料庫恢復時,我們經常會碰到這樣一種情況:因為某個磁碟損壞了,不能再恢復或存
儲資料檔案到這個磁碟,而在儲存到其他磁碟時,就必須重新建立控制檔案,用於識別這個新的
資料檔案。這時也可以用上述方法進行恢復。
下面來看一個更為極端的情況:丟失了所有的控制檔案及備份控制檔案,同時沒有儲存記錄
檔案。這種情況下該如何處理呢?比較麻煩,我們需要根據系統中的檔案或者裸裝置,手工編寫
建立控制檔案的命令。當然,也可以從其他類似的系統中複製一份檔案來改寫。只要足夠仔細,
沒有遺漏任何檔案,也可以達到目的。無論我們是否採用這種最為極端的方式來解決問題,老白
都希望大家把工作做在前面,儘可能避免以這種方式來進行恢復。
個控制檔案損壞是比較容易恢復的,因為一般的資料庫系統,控制檔案都不止一個,而且所有的
控制檔案都互為映象,只要複製一個完好的控制檔案替換已損壞的控制檔案就可以了。控制檔案
損壞所導致的最典型的問題就是啟動資料庫出錯,不能載入資料庫。
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle DataGuard歸檔日誌丟失處理方法Oracle
- OGG整合抽取模式丟失歸檔處理模式
- 關於丟失表空間資料檔案的處理方式
- oracle中undo表空間丟失處理方法Oracle
- 新建的表空間(或資料檔案)丟失以及控制檔案丟失,有新建表空間(或資料檔案)前的控制文
- 控制檔案損壞處理
- 救援丟失的Docx和Xlsx檔案的最佳方法
- Sql Server資料庫檔案丟失的恢復方法SQLServer資料庫
- 蒙特卡羅方法:當丟失確定性時的處理辦法
- redis資料丟失你怎麼處理?Redis
- 使用RMAN增量備份處理Dataguard因歸檔丟失造成的gap
- oracle控制檔案的損壞或完全丟失的恢復辦法Oracle
- Nginx session丟失問題處理解決方法NginxSession
- 技術分享 | OceanBase 資料處理之控制檔案
- 電腦檔案丟失資料恢復資料恢復
- Python處理CSV檔案的幾個方法Python
- win10桌面檔案丟失怎麼辦_win10開機桌面檔案丟失如何找回Win10
- python 檔案處理Python
- python處理檔案Python
- python檔案處理Python
- Oracle歸檔檔案丟失導致OGG不用啟動Oracle
- win10 計算機丟失logmanager怎麼辦 win10丟失log.dll檔案的解決方法Win10計算機
- 丟失的隨身碟檔案如何恢復?
- 儲存崩潰導致資料丟失如何處理
- mq要如何處理訊息丟失、重複消費?MQ
- Java:利用BigDecimal類巧妙處理Double型別精度丟失JavaDecimal型別
- u盤啟動修復Win10引導檔案丟失的方法Win10
- [Java] 浮點數的精度丟失問題與精度控制方法Java
- win10 ppt檔案丟失怎麼恢復_win10 ppt文件丟失如何找回Win10
- python處理txt檔案Python
- window 批處理檔案
- Python之檔案處理Python
- Go xml檔案處理GoXML
- Oracle impdp遷移資料後主鍵丟失故障處理Oracle
- 剪下的檔案還能恢復嗎,恢復剪貼丟失的檔案
- 被誤刪的檔案正確處理方法,快速找回誤刪的檔案
- 如何處理RabbitMQ 訊息堆積和訊息丟失問題MQ
- 檔案傳輸軟體如何有效防止資料丟失?
- 世界備份日——如果您丟失了所有檔案