本文档适用于:1.由于数据文件状态异常(offline),导致备份正常,但无法恢复的情况。2.使用_allow_resetlogs_corruption强行打开数据库,但是数据文件依然异常,该数据文件中的数据丢失的情况。


BBED(Oracle Block Browerand EDitor Tool),用来直接查看和修改数据文件数据的一个工具,是Oracle一款内部工具,可以直接修改Oracle数据文件块的内容,在一些极端恢复场景下比较有用。该工具不受Oracle支持,所以默认是没有生成可执行文件的,在使用前需要手动编译。

 

一.场景模拟:

1.      创建表空间eisoo

dba_data_files 修改_数据文件

2.      手动offline数据文件

3.      此时如果没有归档日志recover数据文件,该数据文件无法正常online。

dba_data_files 修改_数据库_02

4.      查看控制文件和数据文件头的SCN,发现该数据文件的SCN明显低于其他数据文件的SCN,并且随着时间的推移,差距会变大。

dba_data_files 修改_dba_data_files 修改_03


   

 二.解决步骤:

 

在没有归档日志的情况下,要想该数据文件能够正常online,可以使用BBED修改该数据文件的SCN,欺骗数据库,从而强制online。

1.      编译BBED,略

2.      BBED查看数据文件头的以下4个值,详解如下

  Oracleconsiders four attributes of this data structure when determining if a datafile is sync with the other data files of the database: 

(1)kscnbas  (at offset 484) - SCN of last change to the datafile. 

(2)kcvcptim (at offset 492) -Time of the last change to the datafile. 

(3)kcvfhcpc (at offset 140) - Checkpoint count. 

(4)kcvfhccc (at offset 148) - Unknown, but is always 1 less than thecheckpoint point count.


3.      使用BBED查看系统表空间数据文件的以上4个值

dba_data_files 修改_控制文件_04

dba_data_files 修改_数据文件_05

4.      使用BBED查看处于recover状态的数据文件的以上4个值

dba_data_files 修改_数据文件_06

dba_data_files 修改_控制文件_07

 

5.      .使用BBED修改处于recover状态的数据文件头的值
BBED> set file 5   //设置当前文件为5号文件

BBED> print kcvfh  //查看值

 

BBED> set offset 484   //设置偏移量

BBED> modify /x cd88   //修改值

BBED> set offset 486

BBED> modify /x a734

 

BBED> set offset 492

BBED> modify /x cf95

BBED> set offset 494

BBED> modify /x a734

 

BBED> set offset 140

BBED> modify /x 6200

BBED> set offset 148

BBED> modify /x 6100

 

BBED> sum dba 5,1 apply   //做checksum保存(否则数据库会识别为坏块)

Check value for File 5, Block 1:

current = 0x63f2, required = 0x63f2


6.      手动备份控制文件


7.      通过alert日志寻找trace文件

dba_data_files 修改_数据库_08


8.      启动数据库到nomount状态,创建控制文件

dba_data_files 修改_dba_data_files 修改_09

     

9.      查看控制文件和数据库文件头SCN

dba_data_files 修改_数据库_10

10.   手动打开数据库,查看数据文件状态,已全部online。

dba_data_files 修改_dba_data_files 修改_11



注意:使用BBED修改数据文件前一定要备份,数据文件上线后,请明确告知客户自行使用逻辑备份恢复方式重建数据库,否则后期使用出现异常后果自负。