單個控制檔案損壞的恢復

楊奇龍發表於2010-05-28

        損壞單個控制檔案是比較容易恢復的,因為資料庫系統,控制檔案都不是一個,而且所有的控制檔案都互為映象,只要複製一個好的控制檔案替換壞的控制檔案就可以。實驗如下:

1) 檢視系統的控制檔案

SQL> select name from v$controlfile;
NAME                                                                           
--------------------------------------------------------------------------------
F:\APP\YANG\ORADATA\ORACL\CONTROL01.CTL                                        
F:\APP\YANG\ORADATA\ORACL\CONTROL02.CTL                                        
F:\APP\YANG\ORADATA\ORACL\CONTROL03.CTL                                        
SQL> shutdown immediate

2)關閉資料庫,模擬單個控制檔案損壞。
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE 例程已經關閉。
SQL> host del f:\app\yang\oradata\oracl\control01.ctl
SQL> startup
ORA-32004: obsolete and/or deprecated parameter(s) specified
ORACLE 例程已經啟動。
Total System Global Area  535662592 bytes                                      
Fixed Size                  1334380 bytes                                      
Variable Size             138412948 bytes                                      
Database Buffers          390070272 bytes                                      
Redo Buffers                5844992 bytes                                      
ORA-00205: ?????????, ??????, ???????

---設定編碼後, set nls_lang=american_america.zhs16gbk

ORA-00205:error in identifying control file, check alert log for more info. 在這裡,很明顯,就是control檔案缺失了.
SQL> shutdown immediate
ORA-01507: ??????
ORACLE 例程已經關閉。
SQL> startup
ORACLE 例程已經啟動。
Total System Global Area  535662592 bytes                                      
Fixed Size                  1334380 bytes                                      
Variable Size             138412948 bytes                                      
Database Buffers          390070272 bytes                                      
Redo Buffers                5844992 bytes                                      
ORA-00214: control file ''F:\APP\YANG\ORADATA\ORACL\CONTROL02.CTL'' version 8271 inconsistent with file
''F:\APP\YANG\ORADATA\ORACL\CONTROL01.CTL'' version 8261

---這表示檔案CONTROL01.CTL'版本比CONTROL02.CTL'版本低, 二者不同導致的.
 3)複製一個好的控制檔案替換壞的控制檔案或修改spfile中的控制檔案引數。在這裡我是可以以CONTROL03.CTL重建 。

SQL> alter system set control_files=
  2  'f:\app\yang\oradata\oracl\control03.ctl' scope=spfile;

SQL> shutdown immediate
ORACLE 例程已經關閉

SQL>  startup mount
ORACLE 例程已經啟動。
Total System Global Area  535662592 bytes                                      
Fixed Size                  1334380 bytes                                      
Variable Size             138412948 bytes                                      
Database Buffers          390070272 bytes                                      
Redo Buffers                5844992 bytes                                      
資料庫裝載完畢。

SQL>  alter database open;

資料庫已更改

SQL> select name from v$controlfile;
NAME                                                                           
--------------------------------------------------------------------------------
F:\APP\YANG\ORADATA\ORACL\CONTROL03.CTL

---此時該資料庫只有一個控制檔案,在生產環境中必須在空閒的時候應該增加新的控制檔案     

小結:

整個實驗的詳細步驟


1. 首先 關閉資料庫庫 shutdown immediate
2. 複製備份三個控制檔案 CONTROL01.CTL, CONTROL02.CTL, CONTROL03.CTL
3. 刪除CONTROL02.CTL
4. 裝載資料庫 startup mount, 出現ORA-00205:?????????,?????,???????錯誤
    怎麼會有亂碼?
5. 退出sqlplus, 設定編碼, set nls_lang=american_america.zhs16gbk
6. sqlplus 連入, startup mount, 這次沒有亂碼了,錯誤提示:ORA-00205:error in identifying control file, check alert log for more info. 在這裡,很明顯,就是control檔案缺失了.
7. 複製原來的控制檔案備份CONTROL02.CTL到資料庫的ORADATA目錄下
8. 如果直接再次startup mount, 會出現ORA-01081: cannot start already-running ORACLE - shut it down first.
9. 既然提示了,就關掉它. shutdown immediate
10. startup mount 結果出現ORA-00214: ORA-00214: control file ''F:\APP\YANG\ORADATA\ORACL\CONTROL02.CTL'' version 8271 inconsistent with file
''F:\APP\YANG\ORADATA\ORACL\CONTROL01.CTL'' version 8261 , 這表示檔案CONTROL02.CTL'版本比CONTROL01.CTL'版本低, 二者不同導致的.

11. a) 以CONTROL01.CTL重建, 

alter system set control_files=
  2  'f:\app\yang\oradata\oracl\control03.ctl' scope=spfile;    

  b) 備份所有檔案,根據Step10 提示把版本低的刪掉, 複製版本高的,然後貼上重新命名也可以,其實後面我寫的關於為資料庫新增控制檔案就是按照這個方法。
12. shutdown immediate
13. startup mount, 提示Database mounted,表示裝載成功
14. ALTER DATABASE OPEN; 出現Database altered, 成功.

 

 

 

 

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

相關文章