ORA-01207: file is more recent than control file - old control file

晚上朋友电话说Oracle数据库突然因存储故障crash,启库时报错ORA-01122 ORA-01110 ORA-01207
报错信息如下:
SQL> startup;
ORACLE instance started.
Total System Global Area 1509949440 bytes
Fixed Size                  2084208 bytes
Variable Size             419431056 bytes
Database Buffers         1073741824 bytes
Redo Buffers               14692352 bytes
Database mounted.
ORA-01122: database file 15 failed verification check
ORA-01110: data file 15: '/oradata/db11g/ix_test1o2.dbf'
ORA-01207: file is more recent than control file - old control file
也就是说:控制文件中记录的db信息太老,导致数据库在启动检测时出现不一致。(数据库服务器突然掉电也出现这种问题)

操作系统:AIX 5.3
数据库:10.2.0.4

原理分析
根据oracle db运行原理,数据库在运行期间,由于检查点发生等原因会不断的更新控制文件,同时数据库在关闭和重启过程中都会更新控制文件的内容,
但是数据库服务器突然的掉电,会导致当前的db信息无法适时更新到控制文件中,再次启动数据库后,当oracle检测控制文件和其它文件信息是否一致时,
就出现了这个错误。


参照mos文档:
ORA-1122, ORA-1110, ORA-1207 while open the database after crash (文档 ID 283927.1)
How to Recreate a Controlfile (文档 ID 735106.1)


处理步骤:
1.数据库启动到mount状态
SQL> Startup mount
2.将控制文件信息备份到trace文件,并找到相应的trc
SQL> Alter database backup controlfile to trace;
SQL> oradebug setmypid;
SQL> oradebug tracefile_name;
3.使用trace文件信息,生成用于重建控制文件的sql脚本。
vi create.sql
将trace文件中的从CREATE CONTROLFILE REUSE DATABASE 到 CHARACTER SET ZHS16GBK; 字符集之间的内容编辑到create.sql中。
4.将数据库关闭并启动到nomount状态
SQL> shutdown abort
SQL> startup nomount
5.使用create.sql创建新的控制文件
SQL>@create.sql
6.恢复数据库
SQL> recover database;
7.打开数据库
SQL> Alter database open;

步骤实例:
SQL> startup;
ORACLE instance started.

Total System Global Area 1509949440 bytes
Fixed Size                  2084208 bytes
Variable Size             419431056 bytes
Database Buffers         1073741824 bytes
Redo Buffers               14692352 bytes
Database mounted.
ORA-01122: database file 15 failed verification check
ORA-01110: data file 15: '/oradata/db11g/ix_test1o2.dbf'
ORA-01207: file is more recent than control file - old control file
--启动报错

SQL> shutdown immediate;
ORA-01109: database not open
Database dismounted.
ORACLE instance shut down.

1.数据库启动到mount状态
SQL> Startup mount
ORACLE instance started.

Total System Global Area 1509949440 bytes
Fixed Size                  2084208 bytes
Variable Size             419431056 bytes
Database Buffers         1073741824 bytes
Redo Buffers               14692352 bytes
Database mounted.

2.将控制文件信息备份到trace文件,并找到相应的trc
SQL> Alter database backup controlfile to trace;
Database altered.
SQL> oradebug setmypid;
Statement processed.
SQL> SQL> oradebug tracefile_name;
/u01/app/oracle/diag/rdbms/db11g/db11g/trace/db11g_ora_1231.trc

3.使用trace文件信息,生成用于重建控制文件的sql脚本。
将trace文件中的从CREATE CONTROLFILE REUSE DATABASE 到 CHARACTER SET ZHS16GBK; 字符集之间的内容编辑到create.sql中。
vi create.sql 并写入trace文件中如下内容并保存(注意:这里只是个实例,实际内容是生成的trace文件内容
CREATE CONTROLFILE REUSE DATABASE "DB11G" RESETLOGS  ARCHIVELOG
    MAXLOGFILES 192
    MAXLOGMEMBERS 3
    MAXDATAFILES 30720
    MAXINSTANCES 8
    MAXLOGHISTORY 292
LOGFILE
  GROUP 1 '/oradata/db11g/redo01.log'  SIZE 50M BLOCKSIZE 512,
  GROUP 2 '/oradata/db11g/redo02.log'  SIZE 50M BLOCKSIZE 512,
  GROUP 3 '/oradata/db11g/redo03.log'  SIZE 50M BLOCKSIZE 512
-- STANDBY LOGFILE
DATAFILE
  '/oradata/db11g/system01.dbf',
  '/oradata/db11g/sysaux01.dbf',
  '/oradata/db11g/test1o7.dbf',
  '/oradata/db11g/users01.dbf',
  '/oradata/db11g/example01.dbf',
  '/oradata/db11g/test1o1.dbf',
  '/oradata/db11g/ix_test1o1.dbf',
  '/oradata/db11g/test1o2.dbf',
  '/oradata/db11g/test1o3.dbf',
  '/oradata/db11g/ogg01.dbf',
  '/oradata/db11g/test1o4.dbf',
  '/oradata/db11g/test1o5.dbf',
  '/oradata/db11g/test1o6.dbf',
  '/oradata/db11g/undotbs2.dbf',
  '/oradata/db11g/ix_test1o2.dbf'
CHARACTER SET ZHS16GBK
;

4.将数据库关闭并启动到nomount状态
SQL> shutdown abort
ORACLE instance shut down.
SQL> startup nomount
ORACLE instance started.

Total System Global Area 1509949440 bytes
Fixed Size                  2084208 bytes
Variable Size             419431056 bytes
Database Buffers         1073741824 bytes
Redo Buffers               14692352 bytes

5.使用create.sql创建新的控制文件
SQL> @createc.sql
Control file created.

6.恢复数据库(可能会需要一点时间)
SQL> recover database;
Media recovery complete.
7.打开数据库
SQL> Alter database open;
Database altered.
--至此数据库成功OPEN。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31043804/viewspace-2140237/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/31043804/viewspace-2140237/

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值