天天看點

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

       所有控制檔案損壞,或者人為的删除了所有的控制檔案,通過控制檔案的複制已經不能解決問題,這個時候需要重建立立控制檔案。同時注意,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-00202: control file: 'F:\APP\YANG\ORADATA\ORACL\CONTROL02.CTL'

ORA-00202: control file: 'F:\APP\YANG\ORADATA\ORACL\CONTROL01.CTL'

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 ;