无归档情况下使用BBED处理ORA-01113错误

在丢失归档情况下,恢复时常会遇到ora-01113错误,以下实验模拟表空间offline,然后在丢失归档文件的情况下使用BBED修改文件头信息,最后恢复数据文件;
数据库版本:

SQL> select * from v$version;

BANNER

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

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

PL/SQL Release 11.2.0.1.0 - Production

CORE    11.2.0.1.0      Production

TNS for Linux: Version 11.2.0.1.0 - Production

NLSRTL Version 11.2.0.1.0 - Production

数据文件信息:

SQL>  select file#,name, CHECKPOINT_CHANGE#,to_char(CHECKPOINT_TIME,'yyyy-mm-dd hh24:mi:ss')checkpoint_time,status,BLOCK_SIZE from v$datafile;

     FILE# NAME                                CHECKPOINT_CHANGE# CHECKPOINT_TIME     STATUS  BLOCK_SIZE

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

         1 /u01/app/oradata/sydb/system01.dbf             3161898 2015-04-13 20:46:37 SYSTEM        8192

         2 /u01/app/oradata/sydb/sysaux01.dbf             3161898 2015-04-13 20:46:37 ONLINE        8192

         3 /u01/app/oradata/sydb/undotbs01.dbf            3161898 2015-04-13 20:46:37 ONLINE        8192

         4 /u01/app/oradata/sydb/users01.dbf              3161898 2015-04-13 20:46:37 ONLINE        8192

         5 /disk2/oradata/sydb/tbs01.dbf                  3161898 2015-04-13 20:46:37 ONLINE        8192

         6 /disk2/oradata/sydb/tbs02.dbf                  3161898 2015-04-13 20:46:37 ONLINE        8192

         7 /disk2/oradata/sydb/tbs03.dbf                  3161898 2015-04-13 20:46:37 ONLINE        8192

         8 /tmp/tbs_tmp.dbf                               3161898 2015-04-13 20:46:37 ONLINE        8192

offline数据文件7并删除归档模拟ora-01113:

SQL> alter database datafile 7 offline;

Database altered.

SQL> alter system switch logfile;

System altered.

SQL> alter system switch logfile;

System altered.

SQL> alter database datafile 7 online;

alter database datafile 7 online

*

ERROR at line 1:

ORA-01113: file 7 needs media recovery

ORA-01110: data file 7: '/disk2/oradata/sydb/tbs03.dbf'



SQL> select file#,change#,time from v$recover_file;

     FILE#    CHANGE# TIME

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

         7    3161898 13-APR-15

使用BBED需要修改的内容有:
ub4 kscnbas @484    #
最后检查的SCN
ub4 kcvcptim @492    #
检查时间
ub4 kcvfhcpc @140   #
检查点发生次数
ub4 kcvfhccc @148   #
未知,但值一直小于kcvfhcpc 1

BBED> info

 File#  Name                                                        Size(blks)

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

     1  /u01/app/oradata/sydb/system01.dbf                               92160

     2  /u01/app/oradata/sydb/sysaux01.dbf                               71680

     3  /u01/app/oradata/sydb/undotbs01.dbf                              52480

     4  /u01/app/oradata/sydb/users01.dbf                                 1600

     5  /disk2/oradata/sydb/tbs01.dbf                                   221696

     6  /disk2/oradata/sydb/tbs02.dbf                                    14592

     7  /disk2/oradata/sydb/tbs03.dbf                                     2560

     8  /tmp/tbs_tmp.dbf                                                  1280

 先确认好system表空间文件信息:

BBED> set dba 1,1 block 1

        DBA             0x00400001 (4194305 1,1)

        BLOCK#          1

BBED> print kcvfhckp

struct kcvfhckp, 36 bytes                   @484     

   struct kcvcpscn, 8 bytes                 @484     

      ub4 kscnbas                           @484      0x003043a9

      ub2 kscnwrp                           @488      0x0000

   ub4 kcvcptim                             @492      0x34453174



BBED> dump/v dba 1,1 offset 484 count 30

 File: /u01/app/oradata/sydb/system01.dbf (1)

 Block: 1       Offsets:  484 to  513  Dba:0x00400001

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

 a9433000 00000000 74314534 01000000 l ....t1E4....

 ab000000 2e080000 1000866b 0200     l .......k..



BBED> dump/v dba 1,1 offset 492 count 30

 File: /u01/app/oradata/sydb/system01.dbf (1)

 Block: 1       Offsets:  492 to  521  Dba:0x00400001

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

 74314534 01000000 ab000000 2e080000 l t1E4........

 1000866b 02000000 00000000 0000     l ...k.......…



BBED> print kcvfhcpc

ub4 kcvfhcpc                                @140      0x00000237



BBED> dump/v dba 1,1 offset 140 count 30

 File: /u01/app/oradata/sydb/system01.dbf (1)

 Block: 1       Offsets:  140 to  169  Dba:0x00400001

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

 37020000 fe522034 36020000 00000000 l 7...6.......

 00000000 00000000 00000000 0000     l ...........…



BBED> print kcvfhccc

ub4 kcvfhccc                                @148      0x00000236



BBED> dump/v dba 1,1 offset 148 count 30

 File: /u01/app/oradata/sydb/system01.dbf (1)

 Block: 1       Offsets:  148 to  177  Dba:0x00400001

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

 36020000 00000000 00000000 00000000 l 6...............

 00000000 00000000 00000000 0000     l ..............

再确认数据文件7信息:

BBED> print kcvfhckp

struct kcvfhckp, 36 bytes                   @484     

   struct kcvcpscn, 8 bytes                 @484     

      ub4 kscnbas                           @484      0x00303f2a

      ub2 kscnwrp                           @488      0x0000

   ub4 kcvcptim                             @492      0x34452bad

   ub2 kcvcpthr                             @496      0x0001

BBED> dump/v dba 7,1 offset 484 count 30

 File: /disk2/oradata/sydb/tbs03.dbf (7)

 Block: 1       Offsets:  484 to  513  Dba:0x01c00001

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

 2a3f3000 00000000 ad2b4534 01000000 l *?0.........

 a8000000 65000000 10000000 0200     l e.........

 <16 bytes per line>



BBED> dump/v dba 7,1 offset 492 count 30

 File: /disk2/oradata/sydb/tbs03.dbf (7)

 Block: 1       Offsets:  492 to  521  Dba:0x01c00001

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

 ad2b4534 01000000 a8000000 65000000 l ....e...

 10000000 02000000 00000000 0000     l ...........…



BBED> print kcvfhcpc

ub4 kcvfhcpc                                @140      0x00000164

BBED> dump/v dba 7,1 offset 140

 File: /disk2/oradata/sydb/tbs03.dbf (7)

 Block: 1       Offsets:  140 to  169  Dba:0x01c00001

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

 64010000 fe522034 63010000 00000000 l d...c.......

 00000000 00000000 00000000 0000     l ...........…



BBED> print kcvfhccc

ub4 kcvfhccc                                @148      0x00000163



BBED> dump/v dba 7,1 offset 148

 File: /disk2/oradata/sydb/tbs03.dbf (7)

 Block: 1       Offsets:  148 to  177  Dba:0x01c00001

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

 63010000 00000000 00000000 00000000 l c...............

 00000000 00000000 00000000 0000     l ..............

00303f2a 刚好是v$recover_file 中查询到的CHANGE#

SQL> select to_number('00303f2a','xxxxxxxxx') from dual;

TO_NUMBER('00303F2A','XXXXXXXXX')

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

                          3161898

修改值:

BBED> modify /x a943 dba 7,1 offset 484

BBED> set offset +2

        OFFSET          486

BBED> modify /x 3000

BBED> dump /v dba 7,1 offset 484

 File: /disk2/oradata/sydb/tbs03.dbf (7)

 Block: 1       Offsets:  484 to  513  Dba:0x01c00001

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

 a9433000 00000000 ad2b4534 01000000 l ........

 a8000000 65000000 10000000 0200     l e......…



BBED> modify /x 74314534 dba 7,1 offset 492

 File: /disk2/oradata/sydb/tbs03.dbf (7)

 Block: 1                Offsets:  492 to  521           Dba:0x01c00001

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

 74314534 01000000 a8000000 65000000 10000000 02000000 00000000 0000 



BBED> modify /x 37020000 dba 7,1 offset 140

 File: /disk2/oradata/sydb/tbs03.dbf (7)

 Block: 1                Offsets:  140 to  169           Dba:0x01c00001

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

 37020000 fe522034 63010000 00000000 00000000 00000000 00000000 0000 



BBED> modify /x 36020000 dba 7,1 offset 148

 File: /disk2/oradata/sydb/tbs03.dbf (7)

 Block: 1                Offsets:  148 to  177           Dba:0x01c00001

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

 36020000 00000000 00000000 00000000 00000000 00000000 00000000 0000



BBED> sum apply

Check value for File 7, Block 1:

current = 0x7b4d, required = 0x7b4d

确认修改:

SQL> select * from v$recover_file;

     FILE# ONLINE  ONLINE_ ERROR                                                                CHANGE# TIME

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

         7 OFFLINE OFFLINE UNKNOWN ERROR                                            3163049 13-APR-15

SQL>  column name format a35

SQL>  select file#,name, CHECKPOINT_CHANGE#,to_char(CHECKPOINT_TIME,'yyyy-mm-dd hh24:mi:ss')checkpoint_time,status,BLOCK_SIZE from v$datafile;

     FILE# NAME                                CHECKPOINT_CHANGE# CHECKPOINT_TIME     STATUS  BLOCK_SIZE

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

         1 /u01/app/oradata/sydb/system01.dbf             3163049 2015-04-13 21:11:16 SYSTEM        8192

         2 /u01/app/oradata/sydb/sysaux01.dbf             3163049 2015-04-13 21:11:16 ONLINE        8192

         3 /u01/app/oradata/sydb/undotbs01.dbf            3163049 2015-04-13 21:11:16 ONLINE        8192

         4 /u01/app/oradata/sydb/users01.dbf              3163049 2015-04-13 21:11:16 ONLINE        8192

         5 /disk2/oradata/sydb/tbs01.dbf                  3163049 2015-04-13 21:11:16 ONLINE        8192

         6 /disk2/oradata/sydb/tbs02.dbf                  3163049 2015-04-13 21:11:16 ONLINE        8192

         7 /disk2/oradata/sydb/tbs03.dbf                  3161898 2015-04-13 20:46:37 RECOVER       8192

         8 /tmp/tbs_tmp.dbf                               3163049 2015-04-13 21:11:16 ONLINE        8192

控制文件的信息没有被修改也无法通过BBED修改,所以此时无法恢复data file 7;

SQL> alter database datafile 7 online;

alter database datafile 7 online

*

ERROR at line 1:

ORA-01113: file 7 needs media recovery

ORA-01110: data file 7: '/disk2/oradata/sydb/tbs03.dbf'



SQL> recover datafile 7;

ORA-00283: recovery session canceled due to errors

ORA-01122: database file 7 failed verification check

ORA-01110: data file 7: '/disk2/oradata/sydb/tbs03.dbf'

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

通过重建控制文件恢复数据文件7:

SQL> alter database backup controlfile to trace;

SQL> shutdown immediate

SQL>STARTUP NOMOUNT

CREATE CONTROLFILE REUSE DATABASE "SYDB" NORESETLOGS  ARCHIVELOG

    MAXLOGFILES 16

    MAXLOGMEMBERS 3

    MAXDATAFILES 100

    MAXINSTANCES 8

    MAXLOGHISTORY 292

LOGFILE

  GROUP 1 '/u01/app/oradata/sydb/redo01.log'  SIZE 50M BLOCKSIZE 512,

  GROUP 2 '/u01/app/oradata/sydb/redo02.log'  SIZE 50M BLOCKSIZE 512,

  GROUP 3 '/u01/app/oradata/sydb/redo03.log'  SIZE 50M BLOCKSIZE 512

-- STANDBY LOGFILE

DATAFILE

  '/u01/app/oradata/sydb/system01.dbf',

  '/u01/app/oradata/sydb/sysaux01.dbf',

  '/u01/app/oradata/sydb/undotbs01.dbf',

  '/u01/app/oradata/sydb/users01.dbf',

  '/disk2/oradata/sydb/tbs01.dbf',

  '/disk2/oradata/sydb/tbs02.dbf',

  '/disk2/oradata/sydb/tbs03.dbf',

  '/tmp/tbs_tmp.dbf'

CHARACTER SET UTF8

;

Control file created.

SQL> alter database open;

alter database open

*

ERROR at line 1:

ORA-01113: file 7 needs media recovery

ORA-01110: data file 7: '/disk2/oradata/sydb/tbs03.dbf''

SQL> recover database;

Media recovery complete.

SQL> alter database open;

Database altered.



SQL>  column name format a35

SQL>  select file#,name, CHECKPOINT_CHANGE#,to_char(CHECKPOINT_TIME,'yyyy-mm-dd hh24:mi:ss')checkpoint_time,status,BLOCK_SIZE from v$datafile;



     FILE# NAME                                CHECKPOINT_CHANGE# CHECKPOINT_TIME     STATUS  BLOCK_SIZE

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

         1 /u01/app/oradata/sydb/system01.dbf             3183058 2015-04-13 22:11:12 SYSTEM        8192

         2 /u01/app/oradata/sydb/sysaux01.dbf             3183058 2015-04-13 22:11:12 ONLINE        8192

         3 /u01/app/oradata/sydb/undotbs01.dbf            3183058 2015-04-13 22:11:12 ONLINE        8192

         4 /u01/app/oradata/sydb/users01.dbf              3183058 2015-04-13 22:11:12 ONLINE        8192

         5 /disk2/oradata/sydb/tbs01.dbf                  3183058 2015-04-13 22:11:12 ONLINE        8192

         6 /disk2/oradata/sydb/tbs02.dbf                  3183058 2015-04-13 22:11:12 ONLINE        8192

         7 /disk2/oradata/sydb/tbs03.dbf                  3183058 2015-04-13 22:11:12 ONLINE        8192

         8 /tmp/tbs_tmp.dbf                               3183058 2015-04-13 22:11:12 ONLINE        8192

:不同情况,有可能还是无法打开数据库,比如报(ORA-01113: file 1 needs media recovery),尝试使用NORESETLOGS方式重建控制文件,然后在执行Media Recovery

--Then end (2015-04-13)

你可能感兴趣的:(ora)