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

浏览: 1433

在丢失归档情况下,恢复时常会遇到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 。

推荐 0
本文由 lanston 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册