• [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:bed_dfSYSTEM01_new.DBF
    20 D:bed_dfSYSTEM01.DBF
    set ORACLE_HOME=C:appAdministratorproduct11.2.0dbhome_1
    bbed PASSWORD=blockedit mode=edit blocksize=8192 listfile=D:bed_winbed_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,数据库太多,就采购备份软件,集中备份,万一出现,备份那点成本也就不算成本了。

  • 相关阅读:
    如何实现Appium每次运行可不用卸载手机上的Appium Settings 和Unlock
    jmeter参数化----绝对路径&相对路径
    python获取元素之byxpath()的八种方法
    uiautomatorviewer连接机器点击报错Unexpected error while obtaining UI hierarchy
    【Jmeter】使用 jmeter的_time函数获取时间
    博客作业第三周
    博客作业第二周
    博客作业第一周
    关于测试
    抽象工厂模式(AbstractFactory)
  • 原文地址:https://www.cnblogs.com/yaoyangding/p/14609478.html
Copyright © 2020-2023  润新知