Oracle利用BBED恢复崩溃实例(修复oracle)
mhr18 2024-10-12 05:02 17 浏览 0 评论
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 forced
ORA-00704: bootstrap process failure
ORA-01578: ORACLE data block corrupted (file # 1, block # 520)
ORA-01110: data file 1: '+DATA/dbocs/datafile/system01'
Process ID: 83985
Session 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主要用于以下几个方面:
- 数据恢复和修复:当数据库发生损坏或者数据文件受损时,BBED可以用于检查和修复受影响的数据块。通过BBED,用户可以直接浏览损坏的数据块,并进行相应的修复操作。
- 深入了解数据库内部结构:BBED允许用户直接查看数据库内部的数据结构和存储方式,包括数据块的布局、数据页的组织方式等。这对于理解Oracle数据库的内部工作原理和优化性能非常有帮助。
- 数据分析和调试:BBED可以用于分析和调试数据库中的数据,包括查看表的数据、索引的结构等。这对于诊断数据库性能问题和分析数据访问模式非常有用
看到BBED如此强大就要知道,不是万不得已不要使用 谨慎!谨慎!
2.1. 配置oracle11g的BBED
bbed作为oracle 内部工具,11g之后就不再提供,所以如果要想使用bbed需要重新编译配置具体方法如下
从oracle10g主机下载如下四个文件 将如下四个文件copy到如下目录
cp /tmp/sbbdpt.o $ORACLE_HOME/rdbms/lib/sbbdpt.o
cp /tmp/ssbbded.o $ORACLE_HOME/rdbms/lib/ssbbded.o
cp /tmp/ bbedus.msb $ORACLE_HOME/rdbms/mesg/bbedus.msb
cp /tmp/bbedus.msg $ORACLE_HOME/rdbms/mesg/bbedus.msg
修改权限和属性
chmod 777 sbbdpt.o
chmod 777 ssbbded.o
chmod 777 bbedus.msb
chmod 777 bbedus.msg
chown oracle:oinstall bbedus.msb
chown oracle:oinstall sbbdpt.o
chown oracle:oinstall ssbbded.o
chown 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/bbed
gcc -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 300
col segmnet_name for a20
col tablespace_name for a20
select segment_name,tablespace_name,extent_id,file_id,block_id,blocks from dba_extents where segment_name='BOOTSTRAP#39;
确认涉及到的数据块号
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!
相关推荐
- AlmaLinux 9.6发布:升级工具、初步支持IBM Power虚拟化技术
-
IT之家5月21日消息,科技媒体linuxiac昨日(5月20日)发布博文,报道称代号为SageMargay的AlmaLinux9.6发行版已上线,距上一版本9.5发...
- Java最新学习路线,系统全面,零基础适用
-
首先,我个人比较推崇的学习方法是:先学java前段,也就是HTML,css,js,因为学习java以后肯定是往javaee方向发展的,学习完前端,在学习后端很多东西比计较容易理解!其中J2SE是关键...
- 深入理解数据库事务(数据库事务处理的理解)
-
Transaction作为关系型数据库的核心组成,在数据安全方面有着非常重要的作用,本文会一步步解析事务的核心特性,以获得对事务更深的理解。什么是事务数据库几乎是所有系统的核心模块,它将数据有条理地保...
- IvorySQL 4.4 发布(1044mysql)
-
IvorySQL4.4已于2025年3月10日正式发布。新版本全面支持PostgreSQL17.4,新增多项新功能,并修复了已知问题。增强功能PostgreSQL17.3增强功...
- Oracle 与 Google Cloud 携手大幅扩展多云服务
-
据DCD4月10日报道,甲骨文(Oracle)与谷歌云(GoogleCloud)深化合作,全力扩展多云产品。双方计划为OracleDatabaseGoogleCloud解决方案新增11...
- Izzi 利用 Oracle 云提高计费效率和客户体验
-
据thefastmode网5月2日报道,墨西哥电信运营商Izzi宣布采用Oracle云基础设施(OCI),对其业务支持系统(BSS)进行现代化改造增强客户体验,已经成功完成。通过在OCI上运行...
- 好莱坞群星也有明星脸?硅谷科技名人本尊分身比一比
-
假如有部电影齐聚了众科技名人角色,如同许多好莱坞大牌卡司所共同主演的《瞒天过海》(Ocean’sEleven)那样,演出彼此在商场上竞逐、或共同对抗外来竞争捍卫硅谷的故事,更在剧中有不少对手戏,会不...
- 澳大利亚Find My iPhone被黑 多人被黑客锁机
-
FindMyiPhone本来是一个用于协助找回被盗手机的好工具,但是现在,澳洲的苹果用户发现他们的FindMyiPhone变成了黑客的帮凶。昨天,这名自称为OlegPliss的黑客使用Fin...
- 服务器密码错误被锁定怎么解决(服务器密码失效)
-
#服务器密码错误被锁定解决方案当服务器因多次密码错误导致账户被锁定时,可以按照以下步骤进行排查和解决:##一、确认锁定状态###1.检查账户锁定状态(Linux)```bash#查看账户锁定...
- 凌晨突发的数据库重大故障,我排查了一整天……
-
春节期间过得太热闹了,上班确实没啥状态,这不刚发生的一个重大性能故障,排查了整整一天,后面的领导都站成了一排,本次把故障发生的详细分析过程分享给大家!本次故障发生在凌晨,核心应用卡顿非常严重,Orac...
- Oracle锁表紧急处理!3招快速解锁方案
-
开篇:突发故障现场凌晨1点,某电商系统突然卡顿,数千笔支付订单无法完成——数据库出现死锁,技术团队紧急响应...(遇到类似情况的,欢迎在评论区分享经历)一、问题重现:死锁是如何产生的?典型场景:问题根...
- JetBrains DataGrip Mac中文破解版V2025.1下载安装教程
-
DataGripforMac是由JetBrains开发的数据库集成开发环境(IDE),专为数据库管理员和开发人员设计。它支持多种数据库(如MySQL、PostgreSQL、Oracle、SQ...
- 电脑装安卓系统,安卓X86版5.1 RC1下载
-
日前,谷歌放出了Android-x865.1的第一个候选版本Android-x865.1RC1,该版本基于Android5.1.1r24Lollipop开发,更新包括大量x86(32位)代...
- 来来来!一文告诉你Eclipse的正确安装使用姿势,你都清楚吗?
-
前言本学习笔记是有关如何设置Eclipse的详细说明。即使你天天在使用它,但是,相信我,或许你并不足够了解它。安装Java运行时环境Eclipse是Java应用程序,因此设置Eclipse的第一步是安...
- 分享收藏的 oracle 11.2.0.4各平台的下载地址
-
概述oracle11.2.0.4是目前生产环境用的比较多的版本,同时也是很稳定的一个版本。目前官网上已经找不到下载链接了,有粉丝在头条里要求分享一下下载地址。一、各平台下载地址1.1Linuxx...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- oracle位图索引 (63)
- oracle批量插入数据 (62)
- oracle事务隔离级别 (53)
- oracle 空为0 (50)
- oracle主从同步 (55)
- oracle 乐观锁 (51)
- redis 命令 (78)
- php redis (88)
- redis 存储 (66)
- redis 锁 (69)
- 启动 redis (66)
- redis 时间 (56)
- redis 删除 (67)
- redis内存 (57)
- redis并发 (52)
- redis 主从 (69)
- redis 订阅 (51)
- redis 登录 (54)
- redis 面试 (58)
- 阿里 redis (59)
- redis 搭建 (53)
- redis的缓存 (55)
- lua redis (58)
- redis 连接池 (61)
- redis 限流 (51)