所有控制檔案損壞的恢復--noresetlogs方式

楊奇龍發表於2010-05-28

       所有控制檔案損壞,或者人為的刪除了所有的控制檔案,透過控制檔案的複製已經不能解決問題,這個時候需要重新建立控制檔案。同時注意,alter database backup control file to trace可以產生一個控制檔案的文字備份。

1)先備份控制檔案            
SQL> alter database backup controlfile to 'f:\lib\control.ctl' reuse;
資料庫已更改。
2)生成跟蹤檔案。

SQL> alter database backup controlfile to trace;
資料庫已更改。
SQL> @f:\sql\gettrace.sql---一個指令碼,稍後會給出。
TRACE_FILE__NAME                                                               
--------------------------------------------------------------------------------
f:\app\yang\diag\rdbms\oracl\oracl\trace/oracl_ora_2572.trc
       

3)關閉資料庫,模擬控制檔案全部損壞。

SQL> shutdown immediate
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE 例程已經關閉。

4)啟動資料庫。
SQL> startup
ORACLE 例程已經啟動。
Total System Global Area  535662592 bytes                                      
Fixed Size                  1334380 bytes                                      
Variable Size             134218644 bytes                                      
Database Buffers          394264576 bytes                                      
Redo Buffers                5844992 bytes                                      
ORA-00205: ORA-00205 error in identifying controlfile, check alert log for more info

alert 檔案顯示:

ALTER DATABASE   MOUNT
ORA-00210: cannot open the specified control file
ORA-00202: control file: 'F:\APP\YANG\ORADATA\ORACL\CONTROL03.CTL'
ORA-27041: unable to open file
OSD-04002: 無法開啟檔案
O/S-Error: (OS 2) 系統找不到指定的檔案。
ORA-00210: cannot open the specified control file
ORA-00202: control file: 'F:\APP\YANG\ORADATA\ORACL\CONTROL02.CTL'
ORA-27041: unable to open file
OSD-04002: 無法開啟檔案
O/S-Error: (OS 2) 系統找不到指定的檔案。
ORA-00210: cannot open the specified control file
ORA-00202: control file: 'F:\APP\YANG\ORADATA\ORACL\CONTROL01.CTL'
ORA-27041: unable to open file
OSD-04002: 無法開啟檔案
O/S-Error: (OS 2) 系統找不到指定的檔案。

5)啟動到nomount狀態。
SQL> startup nomount

SQL> @f:\createctlnoreset.sql

控制檔案已建立。

6)開啟資料庫

SQL> alter database open ;
資料庫已更改。

至此 , 成功恢復控制檔案。

附:createctlnoreset.sql指令碼 將跟蹤檔案的註釋去掉即可。不過跟蹤檔案生成兩個指令碼一個是resetlogs方式的,另一個是noresetlogs方式的。

CREATE CONTROLFILE REUSE DATABASE "ORACL" NORESETLOGS  ARCHIVELOG
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 8
    MAXLOGHISTORY 292
LOGFILE
  GROUP 1 'F:\APP\YANG\ORADATA\ORACL\REDO01.LOG'  SIZE 50M,
  GROUP 2 'F:\APP\YANG\ORADATA\ORACL\REDO02.LOG'  SIZE 50M,
  GROUP 3 'F:\APP\YANG\ORADATA\ORACL\REDO03.LOG'  SIZE 50M
-- STANDBY LOGFILE
DATAFILE
  'F:\APP\YANG\ORADATA\ORACL\SYSTEM01.DBF',
  'F:\APP\YANG\ORADATA\ORACL\SYSAUX01.DBF',
  'F:\APP\YANG\ORADATA\ORACL\UNDOTBS01.DBF',
  'F:\APP\YANG\ORADATA\ORACL\USERS01.DBF',
  'F:\APP\YANG\ORADATA\ORACL\EXAMPLE01.DBF',
  'F:\APP\YANG\ORADATA\ORACL\TEST.DBF'
CHARACTER SET ZHS16GBK ;
 
recover database
 alter system archive log all ;
 alter database open ;


 

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

相關文章