损坏多个控制文件,或者人为的删除了所有的控制文件,通过控制文件的复制已经不能解决问题,这个时候需要重新建立控制文件。
同时注意,alter database backup control file to trace可以产生一个控制文件的文本备份。
以下是详细重新创建控制文件的步骤
1、关闭数据库
SQL>shutdown immediate;
2、删除所有控制文件,模拟控制文件的丢失3、启动数据库,出现错误,并不能启动到mount下
SQL>startup
ORA-00205: error in identifying controlfile, check alert log for more info
查看报警日志文件,有如下信息
alter database  mount
Mon May 26 11:53:15 2003
ORA-00202: controlfile: 'D:\Oracle\oradata\chen\control01.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:\ORACLE\ORADATA\TEST\REDO01.LOG'  SIZE 1M,
  GROUP 2 'D:\ORACLE\ORADATA\TEST\REDO02.LOG'  SIZE 1M,
  GROUP 3 'D:\ORACLE\ORADATA\TEST\REDO03.LOG'  SIZE 1M
DATAFILE
  'D:\ORACLE\ORADATA\TEST\SYSTEM01.DBF',
  'D:\ORACLE\ORADATA\TEST\RBS01.DBF',
  'D:\ORACLE\ORADATA\TEST\USERS01.DBF',
  'D:\ORACLE\ORADATA\TEST\TEMP01.DBF',
  'D:\ORACLE\ORADATA\TEST\TOOLS01.DBF',
  'D:\ORACLE\ORADATA\TEST\INDX01.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 CANCELUSING 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、如果没有错误,数据库将启动到open状态下。说明:
1、重建控制文件用于恢复全部数据文件的损坏,需要注意其书写的正确性,保证包含了所有的数据文件与联机日志
2、经常有这样一种情况,因为一个磁盘损坏,我们不能再恢复(store)数据文件到这个磁盘,因此在store到另外一个盘的时候,我们就必须重新创建控制文件,用于识别这个新的数据文件,这里也可以用这种方法用于恢复

解决方案 »

  1.   

    谢谢1楼的,可是运行不了啊,我把代码COPY到SQL*PLUS里
    提示:
    CHARACTER SET ZHS16GBK
    *
    ERROR 位于第 21 行:
    ORA-02236: ??????
    ORA-01507: ??????
    ALTER DATABASE OPEN
    *
    ERROR 位于第 1 行:
    ORA-01507: ??????
      

  2.   

    后来发现多了个逗号,然后修改,最后的抱错是
    CREATE CONTROLFILE REUSE DATABASE "TIKY" NORESETLOGS NOARCHIVELOG
    *
    ERROR 位于第 1 行:
    ORA-01503: CREATE CONTROLFILE ??
    ORA-01160: ???? data file
    ORA-01110: ???? : 'F:\ORACLE\ORADATA\TIKY\TEMP01.DBF'
      

  3.   

    我跟你的情形差不多,不过我只是在练习着,嘿嘿!如果你的数据文件和日志文件还在原来的目录的话,按照zhouguoling(zhou) 说的方法,根据你实际的情况把数据库名称和路径该下就可以重新生成控制文件!我的所有文件都在备份集里面,所以我比你难过啊!~~