昨天公司数据库出现问题,由于断电(oracle 处于open状态下),导致数据库启动时报错ora-00214: controlfile ‘d:\oracle\oradata\orcl\control01.ctl’ version 57460 inconsistent with file d:\oracle\oradata\orcl\control02.ctl’ version 57452.
ora-01122 atabase file1 failed verfication check
这个是由于控制文件版本不同导致。在数据库设计的过程中,从安全的角度考虑,系统使用了三个镜像的控制文件,现在三个控制文件version号不一致,所以数据库instance启动时报错。
我首先备份了控制文件,启动了数据库到nomount状态下,分别指定系统控制文件为三个中的其中一个
alter system set control_files=f:\oracle\oradata\oracas\control01.ctl
scope=spfile
然后启动数据库到mount状态下,如果还是报错,就指定下一个
alter system set control_files=f:\oracle\oradata\oracas\control02.ctl
scope=spfile
然后启动数据库到mount状态下,如果还是报错,就指定下一个
alter system set control_files=f:\oracle\oradata\oracas\control03.ctl
scope=spfile
只要上面三次操作中有一次成功,就可以用那个成功的控制文件来重新作出另外两个控制文件。
如果三次操作都不成功,就是说这三个控制文件都不好使了,这时候需要建立新的控制文件
步骤如下:
1、alter database backup controlfile to trace;
这时候会在udump目录下生成sid_ora_*.trc文件,根据你是在归档还是非归档模式下,选择一段内容
建立创建脚本
我是在非归档模式下,选择第一段内容
2)根据得到的trc文件建立ora.sql内容如下:
create controlfile reuse database “oracas” noresetlogs noarchivelog
maxlogfiles 50
maxlogmembers 5
maxdatafiles 100
maxinstances 1
maxloghistory 226
logfile
group 2 f:\oracle\oradata\oracas\redo02.log size 100m,
group 3 f:\oracle\oradata\oracas\redo03.log size 100m
datafile
f:\oracle\oradata\oracas ystem01.dbf,
f:\oracle\oradata\oracas\undotbs01.dbf,
f:\oracle\oradata\oracas\cwmlite01.dbf,
f:\oracle\oradata\oracas\drsys01.dbf,
f:\oracle\oradata\oracas\example01.dbf,
f:\oracle\oradata\oracas\indx01.dbf,
f:\oracle\oradata\oracas\odm01.dbf,
f:\oracle\oradata\oracas\tools01.dbf,
f:\oracle\oradata\oracas\users01.dbf,
f:\oracle\oradata\oracas\xdb01.dbf
character set zhs16gbk
;
startup nomount,然后执行ora.sql,。
成功以后,尝试打开数据库,失败,需要进行media recovery;
recover dadafile f:\oracle\oradata\oracas ystem01.dbf,
……
全部恢复以后,就可以启动数据库,alter database open noresetlog;
再重新给生成的控制文件做镜像就可以了。
由于是昨天做的操作,可能有些细节步骤没有写上来,但是大体上就是这样了^_^