Oracle无法正常OPEN(一)

作为DBA在启动数据库时,可能会经常遇到数据库无法正常open的现象,其中原因有很多,今天我们讨论控制文件过旧的场景。即ORA-01207: file is more recent than control file - old control file

一、创建测试数据


SQL> create tablespace test datafile '/data/oracle/prod/test01.dbf' size 10M autoextend on;
SQL> create user user1 identified by oracle;
SQL> grant connect,resource to user1;

Grant succeeded.

SQL> conn user1/oracle;
Connected.
SQL> create table t1 (id int,name varchar(10));

Table created.

SQL>

二、测试步骤

查看当前系统scn号

SQL> select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#
------------------
           1425442

查看数据文件头SCN号

SQL> col name for a50
SQL> set line 400
SQL> select name,CHECKPOINT_CHANGE# from v$datafile_header;

NAME                                               CHECKPOINT_CHANGE#
-------------------------------------------------- ------------------
/data/oracle/prod/system01.dbf                                1425442
/data/oracle/prod/sysaux01.dbf                                1425442
/data/oracle/prod/undotbs01.dbf                               1425442
/data/oracle/prod/test01.dbf                                  1426664
/data/oracle/prod/users01.dbf                                 1425442

此时除了test表空间,其他表空间scn号和系统SCN号一致,当数据库正常关闭,所有数据文件头SCN号和系统SCN号回推进到1426664之后

备份一下控制文件

cp control01.ctl control01.ctl.bak

正常关闭数据库

SQL> shutdown immediate;

我们用之前备份的控制文件替换正常关机后的控制文件

mv  control01.ctl.bak  control01.ctl 

启动数据库,在open时,会报错

SQL> startup
ORACLE instance started.

Total System Global Area 3221225472 bytes
Fixed Size                  8625856 bytes
Variable Size             788529472 bytes
Database Buffers         2415919104 bytes
Redo Buffers                8151040 bytes
Database mounted.
ORA-01122: database file 1 failed verification check
ORA-01110: data file 1: '/data/oracle/prod/system01.dbf'
ORA-01207: file is more recent than control file - old control file

查看系统SCN号和数据文件头SCN号

SQL> select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#
------------------
           1425442

SQL> select name,CHECKPOINT_CHANGE# from v$datafile_header;

NAME                                               CHECKPOINT_CHANGE#
-------------------------------------------------- ------------------
/data/oracle/prod/system01.dbf                                1427570
/data/oracle/prod/sysaux01.dbf                                1427570
/data/oracle/prod/undotbs01.dbf                               1427570
/data/oracle/prod/test01.dbf                                  1427570
/data/oracle/prod/users01.dbf                                 1427570

这时,如果有备份,我们可以用备份恢复,如果没有,我们可以通过重建控制文件来使数据库正常open。

三、重建控制文件

trace出控制文件

 alter database backup controlfile to trace as '/home/oracle/ctl.trc';

从ctl.trc文件中提取控制文件创建语句

CREATE CONTROLFILE REUSE DATABASE "PROD" NORESETLOGS  ARCHIVELOG
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 8
    MAXLOGHISTORY 292
LOGFILE
  GROUP 1 '/data/oracle/prod/redo01.log'  SIZE 200M BLOCKSIZE 512,
  GROUP 2 '/data/oracle/prod/redo02.log'  SIZE 200M BLOCKSIZE 512,
  GROUP 3 '/data/oracle/prod/redo03.log'  SIZE 200M BLOCKSIZE 512
-- STANDBY LOGFILE
DATAFILE
  '/data/oracle/prod/system01.dbf',
  '/data/oracle/prod/sysaux01.dbf',
  '/data/oracle/prod/undotbs01.dbf',
  '/data/oracle/prod/test01.dbf',
  '/data/oracle/prod/users01.dbf'
CHARACTER SET AL32UTF8
;

可以将上述语句粘贴到re_create.sql文件内,将数据库启动到nomount状态

SQL> startup nomount;

执行re_create.sql

SQL> @ctl_recreate.sql

Control file created.

控制文件创建成功,此时数据库已经启动为mount状态

SQL> select open_mode from v$database;

OPEN_MODE
--------------------
MOUNTED

再次验证系统SCN号和数据文件头SCN号

SQL> select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#
------------------
           1427570

SQL> select name,CHECKPOINT_CHANGE# from v$datafile_header;

NAME                                               CHECKPOINT_CHANGE#
-------------------------------------------------- ------------------
/data/oracle/prod/system01.dbf                                1427570
/data/oracle/prod/sysaux01.dbf                                1427570
/data/oracle/prod/undotbs01.dbf                               1427570
/data/oracle/prod/test01.dbf                                  1427570
/data/oracle/prod/users01.dbf                                 1427570

此时系统SCN号和数据文件头SCN号一致,数据库就可以正常open了

SQL> alter database open;

Database altered.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南風_入弦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值