使用BBED修改文件头解决数据库Open验证问题

QYHuiiQ 2016-10-31

本篇就通过BBED来模拟错误和进行修复。注意:BBED是Oracle研究的利器,但是同样也可能是“塌天大祸”的起始。所以,如果没有100%把握,绝对不要轻易在投产环境上应用。作为技术人员,创新精神是可贵的,但是谨慎认真是更需要的一种职业素养。

1、环境说明

笔者使用Oracle 11gR2进行测试,具体版本为11.2.0.4。

SQL> select * from v$version;

BANNER

--------------------------------------------------------------------------------

Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

PL/SQL Release 11.2.0.4.0 - Production

CORE    11.2.0.4.0    Production

TNS for Linux: Version 11.2.0.4.0 - Production

NLSRTL Version 11.2.0.4.0 – Production

当前数据文件列表如下:

SQL> select file#, checkpoint_change#, checkpoint_time, name from v$datafile;

    FILE# CHECKPOINT_CHANGE# CHECKPOINT_TIME NAME

---------- ------------------ --------------- --------------------------------------------------------------------------------

        1            1713752 2016/10/18 22:0 /u01/app/oracle/oradata/TESTDB/datafile/o1_mf_system_bw773xok_.dbf

        2            1713752 2016/10/18 22:0 /u01/app/oracle/oradata/TESTDB/datafile/o1_mf_sysaux_bw773xpr_.dbf

        3            1713752 2016/10/18 22:0 /u01/app/oracle/oradata/TESTDB/datafile/o1_mf_undotbs1_bw773xqo_.dbf

        4            1713752 2016/10/18 22:0 /u01/app/oracle/oradata/TESTDB/datafile/o1_mf_users_bw773xrv_.dbf

        5            1713752 2016/10/18 22:0 /u01/app/oracle/oradata/TESTDB/datafile/o1_mf_TESTdev_bw8xbqrz_.dbf

        6            1713752 2016/10/18 22:0 /u01/app/oracle/oradata/TESTDB/datafile/o1_mf_inttestt_bw8xdnkt_.dbf

        7            1713752 2016/10/18 22:0 /u01/app/oracle/oradata/TESTDB/datafile/o1_mf_epssite_by19vtnh_.dbf

7 rows selected

2、故障模拟

笔者的思路是:在数据库正常运行过程中,抽取数据文件7。Datafile 7对应的是一个过去时间的SCN编号和文件头。之后,通过一系列的Online Redo Log切换、手工检查点操作,最后直接shutdown immediate关闭服务器动作,推动数据库所有数据文件SCN编号前进。

关闭之后,使用过去版本的数据文件7来替换文件。启动数据库进入open状态之后,如果当前online redo log已经乜有接续的文件(被覆盖+非归档),系统报错。

当前文件目录,拷贝留存一个旧版本的datafile 7。

[oracle@TESTlife datafile]$ ls -l

total 6482252

-rw-r-----  1 oracle oinstall 2017468416 Oct 18 22:05 o1_mf_epssite_by19vtnh_.dbf

-rw-r-----  1 oracle oinstall 1702895616 Oct 18 22:05 o1_mf_inttestt_bw8xdnkt_.dbf

-rw-r-----. 1 oracle oinstall    5251072 Oct 18 22:05 o1_mf_users_bw773xrv_.dbf

(篇幅原因,有省略……)

[oracle@TESTlife datafile]$ cp o1_mf_epssite_by19vtnh_.dbf o1_mf_epssite_by19vtnh_.dbf_bk

[oracle@TESTlife datafile]$ ls -l

total 8452440

-rw-r-----  1 oracle oinstall 2017468416 Oct 18 22:05 o1_mf_epssite_by19vtnh_.dbf

-rw-r-----  1 oracle oinstall 2017468416 Oct 18 22:12 o1_mf_epssite_by19vtnh_.dbf_bk

-rw-r-----  1 oracle oinstall 1702895616 Oct 18 22:05 o1_mf_inttestt_bw8xdnkt_.dbf

-rw-r-----  1 oracle oinstall 1283465216 Oct 18 22:05 o1_mf_TESTdev_bw8xbqrz_.dbf

-rw-r-----. 1 oracle oinstall  597696512 Oct 18 22:10 o1_mf_sysaux_bw773xpr_.dbf

多次切换日志,进行检查点操作。

SQL> alter system switch logfile;

System altered

(篇幅原因,有省略……)

SQL> alter system checkpoint;

System altered

SQL> alter system switch logfile;

System altered

SQL> select group#, status, FIRST_CHANGE# from v$log;

    GROUP# STATUS          FIRST_CHANGE#

---------- ---------------- -------------

        1 CURRENT                1714475

        2 INACTIVE              1714464

        3 INACTIVE              1714467

关闭数据库,强行使用旧版本文件替换。

[oracle@TESTlife datafile]$ sqlplus /nolog

SQL*Plus: Release 11.2.0.4.0 Production on Tue Oct 18 22:14:53 2016

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

SQL> conn / as sysdba

Connected.

SQL> shutdown immediate;

Database closed.

Database dismounted.

ORACLE instance shut down.

[oracle@TESTlife datafile]$ cp o1_mf_epssite_by19vtnh_.dbf o1_mf_epssite_by19vtnh_.dbf_bk_f

[oracle@TESTlife datafile]$ ls -l

total 10422628

-rw-r-----  1 oracle oinstall 2017468416 Oct 18 22:15 o1_mf_epssite_by19vtnh_.dbf

-rw-r-----  1 oracle oinstall 2017468416 Oct 18 22:12 o1_mf_epssite_by19vtnh_.dbf_bk

-rw-r-----  1 oracle oinstall 2017468416 Oct 18 22:20 o1_mf_epssite_by19vtnh_.dbf_bk_f

-rw-r-----  1 oracle oinstall 1702895616 Oct 18 22:15 o1_mf_inttestt_bw8xdnkt_.dbf

-rw-r-----  1 oracle oinstall 1283465216 Oct 18 22:15 

[oracle@TESTlife datafile]$ cp o1_mf_epssite_by19vtnh_.dbf_bk o1_mf_epssite_by19vtnh_.dbf

启动数据库,在open过程中报错。

SQL> conn / as sysdba

Connected to an idle instance.

SQL> startup

ORACLE instance started.

Total System Global Area 3540881408 bytes

Fixed Size                  2258320 bytes

Variable Size            855640688 bytes

Database Buffers        2667577344 bytes

Redo Buffers              15405056 bytes

Database mounted.

ORA-01113: file 7 needs media recovery

ORA-01110: data file 7:

'/u01/app/oracle/oradata/TESTDB/datafile/o1_mf_epssite_by19vtnh_.dbf'

使用redo log进行修复,失败。

SQL> recover datafile 7

ORA-00279: change 1713752 generated at 10/18/2016 22:00:25 needed for thread 1

ORA-00289: suggestion :

/u01/app/oracle/fast_recovery_area/TESTDB/archivelog/2016_10_18/o1_mf_1_60_%u_.a

rc

ORA-00280: change 1713752 for thread 1 is in sequence #60

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}

ORA-00308: cannot open archived log

'/u01/app/oracle/fast_recovery_area/TESTDB/archivelog/2016_10_18/o1_mf_1_60_%u_.

arc'

ORA-27037: unable to obtain file status

Linux-x86_64 Error: 2: No such file or directory

Additional information: 3

故障出现,尝试进行修复。

相关推荐