问题:
ERROR at line 1:
ORA-01122: database file 1 failed verification check
ORA-01110: data file 1: '/opt/oracle/oradata/quanmai/system01.dbf'
ORA-01207: file is more recent than control file - old control file
ORA-01207: 文件比控制文件更新 - 旧的控制文件
分析:
这个错误是oracle db最常见的错误了,引起的原因很多,但是最主要的一个原因是数据库服务器突然掉电,然后重启启动数据库报错。
究其这个问题产生的原因,其实就是控制文件中记录的db信息太老,导致数据库在启动检测时出现不一致。
控制文件中记录了整个数据库的全部信息,具体包括数据文件的,日志文件等等。
那么为什么会出现控制文件记录的数据库信息太老呢,原因很简单:根据oracle db运行原理,数据库在运行期间,由于检查点发生等原因会不断的更新控制文件,同时数据库在关闭和重启过程中都会更新控制文件的内容,但是数据库服务器突然的掉电,会导致当前的db信息无法适时更新到控制文件中,再次启动数据库后,当oracle检测控制文件和其它文件信息是否一致时,就出现了这个错误。
解决办法:
首先删除old control file,其实也可以不删除,个人习惯,然后重建控制文件。
# 具体步骤:
1.startup mount
2.alter database backup controlfile to trace
3.create a control file creation script. from the trace file, and use the noresetlogs option
4.shutdown
5.startup nomount Use the script. generated by the 'backup controlfile to trace' command above creaet the control file
6.recover database
7.alter database open
SQL> starup mount
SQL> alter database backup controlfile to trace; --备份控制文件
Database altered.
查看控制文件备份路径
SQL> show parameter user_dump
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
user_dump_dest string /opt/oracle/admin/quanmai/udum
p
在/opt/oracle/admin/quanmai/udump下可找到最新生成的TRACE文件,例如为quanmai_ora_11157.trc,此文件就包含了当前控制文件的参数及生成语法。
提取ora_15269.trc中有关控制文件生成的语句另存为creatctl.sql(直接保留控制文件的部分即可,很容易)
启动数据库到 STARTUP NOMOUNT 状态然后执行如下create.sql
SQL> @/opt/oracle/admin/quanmai/udump/crate.sql
CREATE CONTROLFILE REUSE DATABASE "QUANMAI" NORESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 '/opt/oracle/oradata/quanmai/redo01.log' SIZE 50M,
GROUP 2 '/opt/oracle/oradata/quanmai/redo02.log' SIZE 50M,
GROUP 3 '/opt/oracle/oradata/quanmai/redo03.log' SIZE 50M
-- STANDBY LOGFILE
DATAFILE
'/opt/oracle/oradata/quanmai/system01.dbf',
'/opt/oracle/oradata/quanmai/undotbs01.dbf',
'/opt/oracle/oradata/quanmai/sysaux01.dbf',
'/opt/oracle/oradata/quanmai/users01.dbf',
'/opt/oracle/oradata/quanmai/example01.dbf',
'/opt/data1/EAS_D_STANDARD.dbf'
CHARACTER SET WE8ISO8859P1
;
SQL> recover database;
Media recovery complete.
SQL> alter database open;
Database altered.