以下是我的笔记,不知道对你有没有用.
控制文件破坏,数据库恢复方法
一)、有镜像文件时
1、如果控制文件不同步,则从参数文件中,将不同步的参数文件去掉。(ora-00214)
2、如果出现ora-00205错误,检查各控制文件是否正确
二)、没有镜像文件时
1、控制文件损坏以NOMOUNT方式启动,然后重新创建一个新的控制文件。
Sql>startup nomount
……
Sql>create controlfile database prod
2 logfile
3 group 1 'D:\ORACLE\ORADATA\ORA92\REDO01.LOG' SIZE 10M,
4 GROUP 2 'D:\ORACLE\ORADATA\ORA92\REDO02.LOG' SIZE 10M,
5 GROUP 3 'D:\ORACLE\ORADATA\ORA92\REDO03.LOG' SIZE 10M
6 NORESETLOGS
7 datafile
8 'D:\ORACLE\ORADATA\ORA92\SYSTEM01.DBF',
9 'D:\ORACLE\ORADATA\ORA92\UNDOTBS01.DBF',
10 'D:\ORACLE\ORADATA\ORA92\INDX01.DBF',
11 'D:\ORACLE\ORADATA\ORA92\TOOLS01.DBF',
12 'D:\ORACLE\ORADATA\ORA92\USERS01.DBF'
13 MAXLOGHISTORY 2000
14 MAXDATAFILES 2000
15 MAXLOGMEMBERS 5
16 CHARACTER SET ZHS16GBK;
以下是一种较好的重建控制文件的方法:
1. 在重建Contrl前,建议备份数据库中的数据,以防不测。
2. sqlplus /nolog
3. SQL>connect /as sysdbal
4. SQL>alter database backup controlfile to trace; 备份创建控制文件的脚本到TRC文件
5. 在$ORACLE_HOME/admin/SID/udump下可找到最新生成的TRACE文件,如ora_23456.trc,此文件就包含了当前控制文件的参数及生成语法。
6. 提取ora_23456.trc中有关控制文件生成的语句另存为recreatctl.sql。
7. recreatctl.sql的内容为:
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS NOARCHIVELOG
MAXLOGFILES 32
MAXLOGMEMBERS 2
MAXDATAFILES 50
MAXINSTANCES 8
MAXLOGHISTORY 800
LOGFILE
GROUP 1 '/dev/vg00/roraredoa1' SIZE 10M,
GROUP 2 '/dev/vg00/roraredoa2' SIZE 10M,
GROUP 3 '/dev/vg00/roraredoa3' SIZE10M
DATAFILE
'/dev/vg00/rorclsys',
'/dev/vg00/rorclrbs',
'/dev/vg00/rorcltemp',
'/dev/vg00/rorcltools',
'/dev/vg00/rorcluser'
;
8. 如果需要修改,可按自己的需要编辑creatctl.sql中的参数,如maxdatafiles、maxinstances等。
9. sqlplus /nolog
10. SQL>connect /as sysdba
11. SQL>shutdown immediate
12. SQL>@recreatctl.sql
13. SQL>alter database open;
重新建控制文件完毕。