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 2021Copyright (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!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Vue3进阶】- 第2学堂小商城实战课程前言

该教程为进阶教程&#xff0c;如果你还不了解Vue3的基础知识&#xff0c;可以先前往Vue3基础教程&#xff0c;从入门到实战。 学习时遇到的任何疑问都欢迎在相应课文页面下方的问答区进行提问哦 我能学到什么&#xff1f; 编程写法千千万&#xff0c;实现需求是第一。 教程中…

Docker容器、Serverless与微服务:腾讯云云原生架构技术实践案例集解析

前言 随着云原生技术的飞速发展&#xff0c;容器化和函数计算正成为企业和开发者关注的焦点。在这一潮流中&#xff0c;腾讯云凭借其卓越的技术实力和深厚的行业积累&#xff0c;发布了《2023腾讯云容器和函数计算技术实践精选集》&#xff0c;为我们提供了一份深入探索云原生…

CAS(Compare And Swap)

目录 CAS概念 乐观锁与悲观锁 ABA问题 Unsafe类 ​编辑 原子类 基本类型原子类 原子引用类 原子数组 原子更新器类 原子累加器 CAS概念 CAS是Compare And Swap的缩写&#xff0c;中文翻译成&#xff1a;比较并交换&#xff0c;实现无锁并发时常用到的一种技术。它一…

3.Labview字符串与路径精讲(下) — 字符串及路径的用法汇总

本章讲解labview中的字符串和路径具体实践用例&#xff0c;从前面板字符串属性到后面板字符串函数应用做出详细概述&#xff0c;通过本文的学习希望大家了解到字符串及路径在labview编程中的重要地位。 本系列文章为labview 从基础到强化到精通的学习文章&#xff0c;大家可以随…

奥比中光深度相机(二):PyQt5实现打开深度摄像头功能

文章目录 奥比中光深度相机&#xff08;二&#xff09;&#xff1a;PyQt5实现打开深度摄像头功能官方给出的调用深度相机源码环境精炼 UI界面设计逻辑代码构建槽函数连接提取视频流在界面中显示深度视频流注意关闭相机 总体代码效果演示运行main.py代码选择相机打开摄像头关闭摄…

HarmonyOS实战开发-如何实现一个简单的健康生活应用(上)

介绍 本篇Codelab介绍了如何实现一个简单的健康生活应用&#xff0c;主要功能包括&#xff1a; 用户可以创建最多6个健康生活任务&#xff08;早起&#xff0c;喝水&#xff0c;吃苹果&#xff0c;每日微笑&#xff0c;刷牙&#xff0c;早睡&#xff09;&#xff0c;并设置任…

BabySQL【2019极客大挑战】

知识点&#xff1a; 功能分析 登录界面一般是 where username and password 可以从username出手&#xff0c;注释掉and语句单引号闭合绕过 通过测试和报错信息发现是一个单引号读取输入可以单引号闭合绕过关键字过滤 or and 过滤 || &&替换双写绕过select from wher…

【leetcode】力扣简单题两数之和

题目 思路 代码实现 #include<iostream> #include<unordered_map>using namespace std;class Solution { public:vector<int> TwoNumber(const vector<int>& nums, int target){vector<int> number_vector;unordered_map<int, int> …

【Linux】常见命令

⭐ 作者&#xff1a;小胡_不糊涂 &#x1f331; 作者主页&#xff1a;小胡_不糊涂的个人主页 &#x1f496; 持续更文&#xff0c;关注博主少走弯路&#xff0c;谢谢大家支持 &#x1f496; 常用命令 1. ls2. pwd3. cd4. touch5. cat6. mkdir7. rm8. cp9. mv10. tail11. vim12.…

TCP粘包是怎么回事,如何处理?

还是大剑师兰特&#xff1a;曾是美国某知名大学计算机专业研究生&#xff0c;现为航空航海领域高级前端工程师&#xff1b;CSDN知名博主&#xff0c;GIS领域优质创作者&#xff0c;深耕openlayers、leaflet、mapbox、cesium&#xff0c;canvas&#xff0c;webgl&#xff0c;ech…

基于《2023腾讯云容器和函数计算技术实践精选集》—探索腾讯云TKE的Docker容器、Serverless和微服务优势

重剑无锋&#xff0c;大巧不工。 ——金庸 腾讯云TKE&#xff0c;全称Tencent Kubernetes Engine&#xff0c;是一种完全托管式的容器服务。它可以帮助用户快速、高效地部署和管理Kubernetes集群&#xff0c;并提供一系列与之相关的云服务&#xff0c;如负载均衡、云硬盘、对象…

OSPF---开放式最短路径优先协议

1. OSPF描述 OSPF协议是一种链路状态协议。每个路由器负责发现、维护与邻居的关系&#xff0c;并将已知的邻居列表和链路费用LSU报文描述&#xff0c;通过可靠的泛洪与自治系统AS内的其他路由器周期性交互&#xff0c;学习到整个自治系统的网络拓扑结构;并通过自治系统边界的路…

掼蛋游戏规则

1、牌型&#xff1a;单牌、对牌、三张牌、三带二、顺子、同花顺、钢板&#xff08;例&#xff1a; 222333、444555&#xff09;、炸弹&#xff08;4涨以上相同的牌&#xff09;、三连对 2、牌大小&#xff1a;大王&#xff0c;小王&#xff0c;级牌&#xff0c;A&#xff0c;…

从学习海底捞到学习巴奴,中国餐饮带洋快餐重归“产品主义”

俗话说“民以食为天”&#xff0c;吃饭一向是国人的头等大事&#xff0c;餐饮业也是经济的强劲助推力。新世纪以来&#xff0c;餐饮业不断讲述着热辣滚烫的商业故事。 2006年&#xff0c;拥有“必胜客”、“肯德基”等品牌的餐饮巨头百胜集团&#xff0c;组织两百多名区域经理…

太阳能光伏发电应用场景有哪些?

随着全球能源结构的转型和环保意识的提升&#xff0c;太阳能光伏发电作为一种清洁、可再生的能源形式&#xff0c;其应用场景正日益广泛。下面&#xff0c;我们将详细探讨太阳能光伏发电的主要应用场景。 首先&#xff0c;工业领域是太阳能光伏发电的重要应用领域。工业厂房通常…

EasyCVR视频汇聚平台海康Ehome2.0与5.0设备接入时的配置区别

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…

Nessus【部署 01】Linux环境部署漏洞扫描工具Nessus最新版详细过程分享(下载+安装+注册+激活)

Nessus最新版详细部署过程分享 1. 获取激活码2.主程序下载安装启动2.1 下载2.2安装2.3 启动 3.许可证及插件3.1 许可证获取3.2 插件安装 4.安装总结 Nessus官方网站&#xff1a; https://www.tenable.com/products/nessus/nessus-essentials 及介绍&#xff1a; 国际数据公司&…

编程语言 MoonBit 本周有超多重磅更新等你来探索:expect 测试添加 inspect 函数,还有……

MoonBit 更新 1. expect 测试添加 inspect 函数 expect 测试添加针对 Show 接口的 inspect 函数&#xff0c;签名如下&#xff1a; pub fn inspect(obj: Show,~content: String "",~loc: SourceLoc _,~args_loc: ArgsLoc _ ) -> Result[Unit, String]⚠️ 此…

C++函数重载引用

函数重载 自然语言中&#xff0c;一个词可以有多重含义&#xff0c;人们可以通过上下文来判断该词真实的含义&#xff0c;即该词被重载了。比如&#xff1a;以前有一个笑话&#xff0c;国有两个体育项目大家根本不用看&#xff0c;也不用担心。一个是乒乓球&#xff0c;一个是男…

Mybatis(3) web项目

web项目 1、准备2、分析3、 MyBatis对象作用域以及事务问题4、问题 实现一个转账系统 1、准备 ①准备一个web模块 在这里使用了maven archetype&#xff0c;选择web 之后会生成 一个web模块&#xff0c;但是不同的版本可能不同&#xff0c;在这里我就没有java和resources目录&…