在网上查了一下各种解决方法,试了很多,都没什么效果,后来看了一下这篇博客,受到一些启发,但是该博主的解决过程有点繁琐,而且有点难看懂,像我这种急性子就……
于是根据那位博主的讲解,该错误一般出现的原因:数据库服务器掉电等导致数据库异常中断。原因很简单:根据oracle db运行原理,数据库在运行期间,由于检查点发生等原因会不断的更新控制文件,同时数据库在关闭和重启过程中都会更新控制文件的内容,但是数据库服务器突 然的掉电,会导致当前的db信息无法适时更新到控制文件中,再次启动数据库后,当oracle检测控制文件和其它文件信息是否一致时,就出现了这个错误。
错误现象(忘记截图了):本人的话是总共有三个控制文件,然后其中两个控制文件报错了,并且报错信息会乱码,出现???字样,但能看到是哪两个控制文件出错了。
由于Oracle中三个控制文件互为镜像关系,正常情况下三个文件的内容是一致的,但是由于突然掉电会有可能导致三个文件没有完全同步,而出现了数据不一致的情况。数据库在mount时,会加载并检查这三个文件(Oracle根据初始化参数文件中的设定来决定检查几个参数文件)和数据文件的SCN的一致性。
基于以上,本人的解决方案如下:
初始化参数中设定能够正常使用的控制文件
alter system set control_files=
'C:\app\zz2Y\flash_recovery_area\orcl\CONTROL02.CTL'
SCOPE=SPFILE;
关闭数据库
SHUTDOWN IMMEDIATE
删除有问题的控制文件
HOST DEL C:\app\zz2Y\oradata\orcl\CONTROL01.CTL
HOST DEL C:\app\zz2Y\oradata\orcl\CONTROL03.CTL
开启数据库
STARTUP MOUNT
alter database open;或alter database open RESETLOGS;(使用哪条语句可根据提示进行选择)