[DBA]断电异常后修复Oracle数据文件(ORA-00702: bootstrap verison)

 

原创 Oracle 作者:xysoul_云龙 时间:2021-03-27 09:48:04  18  0

  首先,感谢网络时代及各位技术分享者,虽环境各有不同,提供了很多思路和技术点,让后来者更好的去实践。

 

 环境:Windows2012 数据中心版,Oracle11.2.0.4 单机

问题:

 启动数据库时,报如下错误

1
2
3
4
5
ORA-00704: bootstrap process failure
ORA-00702: bootstrap verison '' inconsistent with version '8.0.0.0.0'
Error 704 happened during db open, shutting down database
USER (ospid: 189078): terminating the instance due to error 704
Instance terminated by USER, pid = 189078

问题背景:系统掉电,重启后就出现该问题。

 

警告日志也没太多参考信息,跟踪启动过程

--跟踪语句U如下

1
2
3
4
alter session set events '10046 trace name context forever,level 12';
oradebug setmypid
alter session set events '10046 trace name context forever,level 12';
oradebug tracefile_name

 

查看跟踪文件

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
--跟踪文件最后输出信息如下
EXEC #80694976:c=0,e=26374,p=0,cr=0,cu=0,mis=1,r=0,dep=1,og=4,plh=867914364,tim=4808628360
WAIT #80694976: nam='db file sequential read' ela= 672 file#=1 block#=520 blocks=1 obj#=59 tim=4808629202
WAIT #80694976: nam='db file scattered read' ela= 815 file#=1 block#=521 blocks=3 obj#=59 tim=4808651345
FETCH #80694976:c=0,e=23124,p=4,cr=5,cu=0,mis=0,r=0,dep=1,og=4,plh=867914364,tim=4808651593
STAT #80694976 id=1 cnt=0 pid=0 pos=1 obj=59 op='TABLE ACCESS FULL BOOTSTRAP$ (cr=5 pr=4 pw=0 time=23124 us)'
ORA-00704: ????????
ORA-00702: ?????? '' ??? '8.0.0.0.0' ???
ORA-00704: ????????
ORA-00702: ?????? '' ??? '8.0.0.0.0' ???
*** 2019-11-20 21:47:07.570
USER (ospid: 324): terminating the instance due to error 704
EXEC #80717456:c=203125,e=2024015,p=12,cr=6,cu=0,mis=0,r=0,dep=0,og=1,plh=0,tim=4809376651
ERROR #80717456:err=1092 tim=4809376759

 

意思,创建完表 BOOTSTRAP$ 后,做扫描,出现问题,读块读到521。

检查下块520/521 属于什么对象(通过正常的数据库查询结果)

如上图,可以看到,对象 BOOTSTRAP$ 包括数据文件1的520-523块。

 

检查下该对象内容

 

如上图,可以看到版本显示,还可以看到一些创建其他对象的语句,也就是说,该表包含了OBJ$,C_OBJ$,TAB$等基表的创建语句,本次问题就是在创建完成后无法扫描该表,。其他基表无法创建报错

 

问题比较明显,就是 BOOTSTRAP$坏了,需要修复。通过dbv检查,并没有发现坏块,通过其他资料,可以尝试用bbed 复制一个好的 BOOTSTRAP$ 块到该数据文件下。

用dbca创建一个测试库(目的,平台、数据库版本一样),创建完毕后,备份system01.dbf 数据文件,删除该测试库。

 

使用bbed工具进行修复

需要注意的是,linux 、windows 数据文件块有区别,具体如下:

#windows

 

#linux

 

简单说明,就是windows 数据文件头是从块2开始(块1是系统标识,bbed无权查看),linux是从块1开始(块0 是系统标识)。

例如: 在数据库里识别的520,linux下 bbed 写 block 520,windows 需要写block 521.

 

此为windows平台,操作如下:

 

1
2
3
4
5
6
7
8
1 D:\bbed_df\SYSTEM01_new.DBF
20 D:\bbed_df\SYSTEM01.DBF
set ORACLE_HOME=C:\app\Administrator\product\11.2.0\dbhome_1
bbed PASSWORD=blockedit mode=edit blocksize=8192 listfile=D:\bbed_win\bbed_1.txt
copy file 1 block 521 to file 20 block 521
copy file 1 block 522 to file 20 block 522
copy file 1 block 523 to file 20 block 523
copy file 1 block 524 to file 20 block 524

 

如上图,我们检查的是 文件20 块 524, 验证时, 写的system01.dbf 的块标识是523。

 

注:bbed使用网络上一堆资料,Oracle11g已经不支持了,需要用Oracle10g甚至9i的一些相关包,可以保存备用,Windows毛病多,用的时候即使系统有环境变量,也需要再设置下ORACLE_HOME。

     bbed 功能确实很强大,也是在没有备份情况下,很好的修复工具,这也是最后的尝试。

 

     不论如何,建议定期备份,注意不是数据泵/exp方式,用rman,数据库太多,就采购备份软件,集中备份,万一出现,备份那点成本也就不算成本了。

posted @ 2021-04-02 10:09  耀阳居士  阅读(656)  评论(0编辑  收藏  举报