天天看点

所有控制文件损坏的恢复--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 ;