Oracle利用BBED恢复崩溃实例(ORA-01092,ORA-00704,ORA-01578)

 BBED修复数据损坏引起的数据库崩溃(ORA-01092,ORA-00704,ORA-01578)(2021年某苏州国企的案例)

1.Symptom

用户一个边缘系统出现数据文件损坏,且没有备份,数据库无法启动

报错如下,发现是oracle bootstrap损坏    

SQL> alter database open;alter database open*ERROR at line 1:ORA-01092: ORACLE instance terminated. Disconnection forcedORA-00704: bootstrap process failureORA-01578: ORACLE data block corrupted (file # 1, block # 520)ORA-01110: data file 1: '+DATA/dbocs/datafile/system01'Process ID: 83985Session ID: 191 Serial number: 3

bootstrap保存数据库中object_id最小的部分DDL (10g为<57 11g-19C<60)       

select max(obj#) from bootstrap$ ;

11g    

19C

2.Solution

因为没有备份,所以正常的恢复这条路是给堵死了;但是数据库的数据文件是完整的,那么首先能想到的就是DUL抽数或者BBED做block级别的修复;而数据库损坏的部分为系统的bootstrap部分,这部分数据块具有通用性,那么是不是可以从其他同构的数据库平台(OS,ORACLE一致)来​copy数据块修复呢?如果不行再考虑使用DUL从数据文件抽数​恢复。

 何为BBED    

BBED(Block Browser and Editor)是Oracle数据库中的一个强大的工具,它允许用户直接浏览和编辑数据文件的内容,包括数据块(block)和数据页(page)。BBED主要用于以下几个方面:

  1. 数据恢复和修复:当数据库发生损坏或者数据文件受损时,BBED可以用于检查和修复受影响的数据块。通过BBED,用户可以直接浏览损坏的数据块,并进行相应的修复操作。

  2. 深入了解数据库内部结构:BBED允许用户直接查看数据库内部的数据结构和存储方式,包括数据块的布局、数据页的组织方式等。这对于理解Oracle数据库的内部工作原理和优化性能非常有帮助。

  3. 数据分析和调试:BBED可以用于分析和调试数据库中的数据,包括查看表的数据、索引的结构等。这对于诊断数据库性能问题和分析数据访问模式非常有用

  看到BBED如此强大就要知道,不是万不得已不要使用 谨慎!谨慎!  

2.1. 配置oracle11g的BBED

bbed作为oracle 内部工具,11g之后就不再提供,所以如果要想使用bbed需要重新编译配置具体方法如下:从oracle10g主机下载如下四个文件  并将如下四个文件copy到如下目录​

cp /tmp/sbbdpt.o $ORACLE_HOME/rdbms/lib/sbbdpt.ocp /tmp/ssbbded.o $ORACLE_HOME/rdbms/lib/ssbbded.ocp /tmp/ bbedus.msb $ORACLE_HOME/rdbms/mesg/bbedus.msbcp /tmp/bbedus.msg  $ORACLE_HOME/rdbms/mesg/bbedus.msg修改权限和属性chmod 777 sbbdpt.ochmod 777 ssbbded.ochmod 777 bbedus.msbchmod 777  bbedus.msgchown oracle:oinstall bbedus.msbchown oracle:oinstall sbbdpt.o    chown oracle:oinstall ssbbded.ochown oracle:oinstall  bbedus.msg编译bbed make -f ins_rdbms.mk $ORACLE_HOME/rdbms/lib/bbed        [oracle@DBSVR1 lib]$ make -f ins_rdbms.mk $ORACLE_HOME/rdbms/lib/bbed       Linking BBED utility (bbed)rm -f /u01/oracle/oracle/rdbms/lib/bbedgcc -o /u01/oracle/oracle/rdbms/lib/bbed -m64 -z noexecstack -L/u01/oracle/oracle/rdbms/lib/ -L/u01/oracle/oracle/lib/ -L/u01/oracle/oracle/lib/stubs/  /u01/oracle/oracle/lib/s0main.o /u01/oracle/oracle/rdbms/lib/ssbbded.o /u01/oracle/oracle/rdbms/lib/sbbdpt.o `cat /u01/oracle/oracle/lib/ldflags`    -lncrypt11 -lnsgr11 -lnzjs11 -ln11 -lnl11 -ldbtools11 -lclntsh  `cat /u01/oracle/oracle/lib/ldflags`    -lncrypt11 -lnsgr11 -lnzjs11 -ln11 -lnl11 -lnro11 `cat /u01/oracle/oracle/lib/ldflags`    -lncrypt11 -lnsgr11 -lnzjs11 -ln11 -lnl11 -lnnz11 -lzt11 -lztkg11 -lclient11 -lnnetd11  -lvsn11 -lcommon11 -lgeneric11 -lmm -lsnls11 -lnls11  -lcore11 -lsnls11 -lnls11 -lcore11 -lsnls11 -lnls11 -lxml11 -lcore11 -lunls11 -lsnls11 -lnls11 -lcore11 -lnls11 `cat /u01/oracle/oracle/lib/ldflags`    -lncrypt11 -lnsgr11 -lnzjs11 -ln11 -lnl11 -lnro11 `cat /u01/oracle/oracle/lib/ldflags`    -lncrypt11 -lnsgr11 -lnzjs11 -ln11 -lnl11 -lclient11 -lnnetd11  -lvsn11 -lcommon11 -lgeneric11   -lsnls11 -lnls11  -lcore11 -lsnls11 -lnls11 -lcore11 -lsnls11 -lnls11 -lxml11 -lcore11 -lunls11 -lsnls11 -lnls11 -lcore11 -lnls11 -lclient11 -lnnetd11  -lvsn11 -lcommon11 -lgeneric11 -lsnls11 -lnls11  -lcore11 -lsnls11 -lnls11 -lcore11 -lsnls11 -lnls11 -lxml11 -lcore11 -lunls11 -lsnls11 -lnls11 -lcore11 -lnls11   `cat /u01/oracle/oracle/lib/sysliblist` -Wl,-rpath,/u01/oracle/oracle/lib -lm    `cat /u01/oracle/oracle/lib/sysliblist` -ldl -lm   -L/u01/oracle/oracle/lib    [oracle@DBSVR1 lib]$ ./bbed  Password: blockedit ----默认密码

 PS:12C-19C bbed的配置使用和11g一致,也是要使用到10g的文件来编译​

  现在10g的环境可能比较难找了,所以我把 bbed所需的包放在了公众号上,有需要的直接点下载

   

2.2  check bootstrap block

配置好了BBED 下一步就是去确认数据库损坏的block

查询bootstrap所在的文件和block

set line 300col segmnet_name for a20col tablespace_name for a20select segment_name,tablespace_name,extent_id,file_id,block_id,blocks from dba_extents where segment_name='BOOTSTRAP$'          

确认涉及到的数据块号

select distinct dbms_rowid.rowid_relative_fno(rowid),dbms_rowid.rowid_block_number(rowid) from BOOTSTRAP$;

    

2.3从同构环境数据库中拷贝数据块

(操作系统和数据库版本都一致等)

在正常的机器上dd if=/oracledb1/oracle/oradata/orcl/system01.dbf of=/tmp/bbed_system.dbf bs=10M count=1将文件传到故障端scp /tmp/bbed_system.dbf  root@xxx.32:/tmp/bbed_system.dbf     

2.4.利用BBED恢复数据块  

修改远程copy过来的数据文件属性    
[root@DBSVR1 tmp]# chown oracle:oinstall  /u01/oracle/oradata/tmp/bbed_system.dbf
[root@DBSVR1 tmp]# su - oracle
[oracle@DBSVR1 ~]$
[oracle@DBSVR1 ~]$ cd /u01/oracle/oradata/tmp/
配置bbed参数文件
[oracle@DBSVR1 oracle]$ vi bbed_1.txt
[oracle@DBSVR1 oracle]$ cat bbed_1.txt
1  /u01/oracle/oradata/orcl/system01.dbf  ##源损坏文件
20 /u01/oracle/oradata/tmp/bbed_system.dbf  ##同构正常文件
​
[oracle@DBSVR1 oracle]$ cd $ORACLE_HOME/rdbms/lib
[oracle@DBSVR1 lib]$
[oracle@DBSVR1 lib]$
[oracle@DBSVR1 lib]$./bbed PASSWORD=blockedit mode=edit blocksize=8192 listfile=/u01/oracle/bbed_1.txt​
BBED: Release 2.0.0.0.0 - Limited Production on Sun Mar 7 10:08:35 2021

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

************* !!! For Oracle Internal Use only !!! ***************

BBED>
BBED> info
​
 File#  Name                                                        Size(blks)
​
 -----  ----                                                        ----------
​
     1  /u01/oracle/oradata/orcl/system01.dbf                                0
​
    20  /u01/oracle/oradata/tmp/bbed_system.dbf                              0
​
          
​
BBED> set count 128
​
        COUNT           128
​
          
​
BBED> copy file 20 block 520 to file 1 block 520  ---做文件block的对拷 来修复数据文件
​
 File: /u01/oracle/oradata/orcl/system01.dbf (1)
​
 Block: 520              Offsets:    0 to  127           Dba:0x00400208
​
------------------------------------------------------------------------
​
 10a20000 08024000 d0010000 00000204 43e40000 00000000 00000000 00000000    
​
 00000000 01000000 07000000 20100000 00000000 03000000 07000000 0c024000
​
 00000000 00000000 01000000 03000000 00000000 00000000 00000000 01000000
​
 00000000 3b000000 00000040 09024000 07000000 00000000 00000000 00000000
​
 <32 bytes per line>
​
BBED>  copy file 20 block 521 to file 1 block 521
​
 File: /u01/oracle/oradata/orcl/system01.dbf (1)
​
 Block: 521              Offsets:    0 to  127           Dba:0x00400209
​
------------------------------------------------------------------------
​
 06a20000 09024000 d7010000 00000106 fa520000 01000000 3b000000 73010000
​
 00000000 01f80200 00000000 00002500 02000000 11024000 02004c00 18200000
​
 d7010000 00011800 ffff4200 c6048404 84040000 1800a31f 1a1f951d cd1c4e1b
​
 7a1aad19 49177b16 b315d614 0a14ef12 05120e11 380f680e 910d790c 69099c08
​
 <32 bytes per line>
​
BBED> copy file 20 block 522 to file 1 block 522
​
 File: /u01/oracle/oradata/orcl/system01.dbf (1)
​
 Block: 522              Offsets:    0 to  127           Dba:0x0040020a
​
------------------------------------------------------------------------
​
 06a20000 0a024000 d7010000 00000106 e81e0000 01000000 3b000000 bb010000
​
 00000000 01f80200 00000000 00002500 02000000 20024000 04000700 15200000
​
 d7010000 00011500 ffff3c00 b2057605 76050000 1500521d 811cb71b e31a8a18
​
 07172216 ce120312 f9102010 410f750e 590dad0c 800bb30a dc096507 9606b205
​
 <32 bytes per line>

BBED> copy file 20 block 523 to file 1 block 523
​
 File: /u01/oracle/oradata/orcl/system01.dbf (1)
​
 Block: 523              Offsets:    0 to  127           Dba:0x0040020b
​
------------------------------------------------------------------------
​
 06a20000 0b024000 d7010000 00000106 7b7e0000 01000000 3b000000 d0010000    
​
 00000000 01000300 00000000 00002500 02000000 27024000 04002f00 0f200000
​
 d7010000 00010f00 ffff3000 f50dc50d c50d0000 0f00301d 561c481b 821aab19
​
 9c18c117 f816b113 ea122011 5110890f c00ef50d 00000000 00000000 00000000

 <32 bytes per line>
​
BBED> sum apply
​
Check value for File 1, Block 523:
​
current = 0x7e7b, required = 0x7e7b   
​
BBED>
BBED> exit

2.5修复后 重新启动数据    

 修复后可以正常启动

SQL> startup
ORACLE instance started.
​
Total System Global Area 8217530368 bytes
Fixed Size        2269552 bytes
Variable Size     1761611408 bytes
Database Buffers   6442450944 bytes
Redo Buffers       11198464 bytes
Database mounted.
Database opened.
SQL> 
​

3.后记

   常言道有备无患,但是仍然有很多很多的案例因为没有备份,不得不选择各种非常规手段来恢复数据,只有个expdp或者rman就可以解决99%的问题!备份--数据库的最后一道保险!希望大家都不会用到BBED和DUL!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/501548.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

redis集群配置(精华版):主从复制模式

主从复制模式 概念&#xff1a;作用&#xff1a;为什么使用集群&#xff1a;动手实操1、环境准备2、配置redis.conf配置文件3、再次查看主从节点信息4、验证主从模式 概念&#xff1a; ​ 主从复制&#xff0c;是指将一台Redis服务器的数据&#xff0c;复制到其他的Redis服务器…

29 超级数据查看器 APP视频教程 查询复用

29 超级数据查看器 APP视频教程 查询复用 超级数据查看器 查询复用 最下方有 讲解稿全文 有兴趣的朋友可以看看 超级数据查看器是安卓手机上的APP&#xff0c;软件。 具有导入excel表格数据&#xff0c;存入手机内置的数据库&#xff0c;生成查询模块&#xff0c;快速查询数…

缓存和缓存的常用使用场景

想象一下,一家公司在芬兰 Google Cloud 数据中心的服务器上托管一个网站。对于欧洲用户来说,加载可能需要大约 100 毫秒,但对于墨西哥用户来说,加载需要 3-5 秒。幸运的是,有一些策略可以最大限度地减少远程用户的请求延迟。 这些策略称为缓存和内容交付网络 (CDN),它们是…

线程同步+理解生产者消费者模型

1.线程同步的概念 下面我们来谈一个故事理解线程同步的概念&#xff1a;假设学校里面有一个环境非常好的超级vip自习室是公共的&#xff0c;但是有个前提&#xff0c;一次只能进去一个学生&#xff0c;因为只有一把钥匙挂在超级vip自习室门外的墙上的。假设你是一个学习成绩比…

SuccessFactors 如何通过页面查询后台对应的表

一直以来都习惯SAP的查表方式&#xff0c;一直在想sf能在前台查询表是哪个&#xff0c;今天测试fiori的发现有一个debug工具很好&#xff0c;就是浏览器的F12功能。

hdfs操作java API

1.Configuration类——cof对象 &#xff08;1&#xff09;创建 Configuration conf new Configuration(); conf.set("fs.defaultFS", "hdfs://localhost:9000"); conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSys…

GIMP - GNU 图像处理程序 - 工具栏窗口 (Toolbox) 显示

GIMP - GNU 图像处理程序 - 工具栏窗口 [Toolbox] 显示 1. File -> Open2. GIMP 主面板里&#xff0c;右击弹出菜单 -> Tools -> New Toolbox3. Windows -> Dockable Dialogs -> Tool Options4. 工具选项拖动到工具箱里面5. Always On TopReferences GIMP 是跨平…

MySQL的InnoDB引擎的事务原理以及MVCC

目录 一、事务原理 二、redo log 三、undo log 四、MVCC 1.基础概念 2.隐藏字段 3.undolog 4.readview 5.原理分析 一、事务原理 1). 事务 事务 是一组操作的集合&#xff0c;它是一个不可分割的工作单位&#xff0c;事务会把所有的操作作为一个整体一起向系统提交或撤销操作…

163.乐理基础-自然小调、音名为何从C开始

如果到这五线谱还没记住还不认识的话去看102.五线谱-高音谱号与103.五线谱-低音谱号这两个里&#xff0c;这里面有五线谱对应的音名&#xff0c;对比着看 如果一章没落下&#xff0c;看到这里&#xff0c;但是看不懂什么意思&#xff0c;那就强行下看&#xff0c;看着看着指不…

UE4_碰撞_射线检测不到物体原因及跳不到圈内的问题

UseSimpleAsComplex 和 UseComplexAsSimple 标记的作用和使用时间。 虚幻引擎 4 中有简单和复杂碰撞形态。 简单碰撞 是基础&#xff0c;如盒体、 球体、胶囊体和凸包。 复杂碰撞 是给定对象的三角网格图。 虚幻引擎 4 会默认创建简单和复杂两种形态&#xff0c;然后基于用户需…

某互联网公司研发人员绩效考核项目成功案例纪实

——产品不确定性强&#xff0c;如何考核研发人员 【行业】互联网行业&#xff1b;高新科技研发行业 【关键词】绩效考核&#xff1b;研发人员&#xff1b;考核指标 M公司是一家定位在高端家用智能设备研发制造的互联网公司&#xff0c;成立于2015年&#xff0c;现有研发人员…

基于springboot实现网页时装购物系统项目【项目源码+论文说明】

基于springboot实现时装购物系统演示 摘要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;时装购物系统当然也不能排除在外。时装购物系统是以实际运用为开发背景&#xff0c…

Leetcode 剑指 Offer II 071.按权重随机选择

题目难度: 中等 原题链接 今天继续更新 Leetcode 的剑指 Offer&#xff08;专项突击版&#xff09;系列, 大家在公众号 算法精选 里回复 剑指offer2 就能看到该系列当前连载的所有文章了, 记得关注哦~ 题目描述 给定一个正整数数组 w &#xff0c;其中 w[i] 代表下标 i 的权重…

浅谈Spring体系的理解

浅谈Spring知识体系 Spring Framework架构图Spring家族技术生态全景图XMind汇总 本文不涉及细节&#xff0c;主要回答两个问题&#xff1a; Spring家族技术生态全景图有哪些Spring Framework架构下每个模块有哪些东西&#xff0c;以及部分模块之间的关联关系 Spring Framework架…

NC269391 炸鸡块哥哥的粉丝题

题目描述 智乃作为炸鸡块哥哥的粉丝&#xff0c;做了一场炸鸡块哥哥的比赛后得出一个结论&#xff0c;那就是炸鸡块哥哥的话&#xff0c;最多只能信半句。 现在给你一个长度为N的字符串S&#xff0c;请输出前 个字符&#xff0c;表示只能相信半句话。 例如当炸鸡块哥哥说&…

使用uni-app开发微信小程序并实现页面间的跳转

一、下载需要的开发工具 HBuilderX 微信开发者工具 HBuilderX HBuilderX-高效极客技巧 (dcloud.io) 微信开发者工具 下载 / 开发版更新日志 (qq.com) 二、新建项目 通过vue-cli命令行创建项目 参考&#xff1a; uni-app官网 (dcloud.net.cn) 2.1全局安装 vue-cli npm i…

新网站秒收录技术,新网站百度收录时间

在建立新网站后&#xff0c;让它尽快被搜索引擎收录是网站主最为关注的事情之一。百度作为中国最大的搜索引擎&#xff0c;网站被其快速收录对于增加曝光和流量至关重要。本文将介绍一些新网站秒收录技术&#xff0c;以及一般情况下新网站被百度收录需要的时间。 新网站秒收录技…

如何将图片变小到200k?一键图片压缩指定大小

不管是在网站上传资料&#xff0c;还是在社交软件中发送图片&#xff0c;对于图片的体积都是有限制的&#xff0c;比如超出200k就无法操作&#xff0c;这时候简单的做法就是压缩图片大小&#xff0c;下面就给大家总结了几个不错的图片压缩技巧&#xff0c;其中有些方法可以直接…

【OJ】动归练习五之子组串

个人主页 &#xff1a; zxctscl 如有转载请先通知 题目 1. 53. 最大子数组和1.1 分析1.2 代码 2. 918. 环形子数组的最大和2.1 分析2.2 代码 3. 152. 乘积最大子数组3.1 分析3.2 代码 4. 1567. 乘积为正数的最长子数组长度4.1 分析4.2 代码 1. 53. 最大子数组和 1.1 分析 一、…