本文档适用于:1.由于数据文件状态异常(offline),导致备份正常,但无法恢复的情况。2.使用_allow_resetlogs_corruption强行打开数据库,但是数据文件依然异常,该数据文件中的数据丢失的情况。
BBED(Oracle Block Browerand EDitor Tool),用来直接查看和修改数据文件数据的一个工具,是Oracle一款内部工具,可以直接修改Oracle数据文件块的内容,在一些极端恢复场景下比较有用。该工具不受Oracle支持,所以默认是没有生成可执行文件的,在使用前需要手动编译。
一.场景模拟:
1. 创建表空间eisoo
2. 手动offline数据文件
3. 此时如果没有归档日志recover数据文件,该数据文件无法正常online。
4. 查看控制文件和数据文件头的SCN,发现该数据文件的SCN明显低于其他数据文件的SCN,并且随着时间的推移,差距会变大。
二.解决步骤:
在没有归档日志的情况下,要想该数据文件能够正常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个值
4. 使用BBED查看处于recover状态的数据文件的以上4个值
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文件
8. 启动数据库到nomount状态,创建控制文件
9. 查看控制文件和数据库文件头SCN
10. 手动打开数据库,查看数据文件状态,已全部online。
注意:使用BBED修改数据文件前一定要备份,数据文件上线后,请明确告知客户自行使用逻辑备份恢复方式重建数据库,否则后期使用出现异常后果自负。