热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Oracle模拟文件损坏BBED

模拟文件损坏可以使用两个工具,windowsnt下使用uttraedit,还有就是使用ORACLE内部工具BBED,下面主要看这个工具如何使用。一、BBED(OracleBlock

模拟文件损坏可以使用两个工具,windows nt 下使用uttra edit ,还有就是使用ORACLE内部工具BBED,下面主要看这个工具如何使用。

一、BBED(Oracle?Block?Browerand?EDitor Tool),用来直接查看和修改数据文件数据的一个工具,是Oracle一款内部工具,可以直接修改Oracle数据文件块的内容,在一些极端恢复场景下比较有用。该工具不受Oracle支持,所以默认是没有生成可执行文件的,在使用前需要重新连接。

我这里的作用

二、BBED 安装

Oracle8i BBEDwindows 平台下的$ORACLE_HOME/bin下可以找到,9i中似乎未随软件发布,故在windows没有这个工具,

linux上面有,需要编译。

9i/10g中连接生成bbed:

cd$ORACLE_HOME/rdbms/lib

make-f ins_rdbms.mk $ORACLE_HOME/rdbms/lib/bbed

[oracle@oracledba lib]$ make -f ins_rdbms.mk $ORACLE_HOME/rdbms/lib/bb ed

Linking BBED utility (bbed)

rm -f /opt/oracle/102/rdbms/lib/bbed

gcc -o /opt/oracle/102/rdbms/lib/bbed -L/opt/oracle/102/rdbms/lib/ -L/o pt/oracle/102/lib/ -L/opt/oracle/102/lib/stubs/ /opt/oracle/102/lib/s0 main.o /opt/oracle/102/rdbms/lib/ssbbded.o /opt/oracle/102/rdbms/lib/sb bdpt.o `cat /opt/oracle/102/lib/ldflags` -lnsslb10 -lncrypt10 -lnsgr 10 -lnzjs10 -ln10 -lnnz10 -lnl10 /opt/oracle/102/rdbms/lib/defopt.o -ld btools10 -lclntsh `cat /opt/oracle/102/lib/ldflags` -lnsslb10 -lncr ypt10 -lnsgr10 -lnzjs10 -ln10 -lnnz10 -lnl10 -lnro10 `cat /opt/oracle/1 02/lib/ldflags` -lnsslb10 -lncrypt10 -lnsgr10 -lnzjs10 -ln10 -lnnz10 -lnl10 -lclient10 -lnnetd10 -lvsn10 -lcommon10 -lgeneric10 -lmm -lsnl s10 -lnls10 -lcore10 -lsnls10 -lnls10 -lcore10 -lsnls10 -lnls10 -lxml1 0 -lcore10 -lunls10 -lsnls10 -lnls10 -lcore10 -lnls10 `cat /opt/oracle/ 102/lib/ldflags` -lnsslb10 -lncrypt10 -lnsgr10 -lnzjs10 -ln10 -lnnz1 0 -lnl10 -lnro10 `cat /opt/oracle/102/lib/ldflags` -lnsslb10 -lncryp t10 -lnsgr10 -lnzjs10 -ln10 -lnnz10 -lnl10 -lclient10 -lnnetd10 -lvsn1 0 -lcommon10 -lgeneric10 -lsnls10 -lnls10 -lcore10 -lsnls10 -lnls10 -lcore10 -lsnls10 -lnls10 -lxml10 -lcore10 -lunls10 -lsnls10 -lnls10 -l core10 -lnls10 -lclient10 -lnnetd10 -lvsn10 -lcommon10 -lgeneric10 -ls nls10 -lnls10 -lcore10 -lsnls10 -lnls10 -lcore10 -lsnls10 -lnls10 -lxm l10 -lcore10 -lunls10 -lsnls10 -lnls10 -lcore10 -lnls10 `cat /opt/ora cle/102/lib/sysliblist` -Wl,-rpath,/opt/oracle/102/lib -lm `cat /opt /oracle/102/lib/sysliblist` -ldl -lm -L/opt/oracle/102/lib

以上生成的bbed可执行文件在$ORACLE_HOME/rdbms/lib目录,可以复制到其他位置或者其他同Oracle版本的机器上运行。

也可通过以下命令将bbed生成到$ORACLE_HOME/bin目录

[oracle@db2 lib]$ make -f ins_rdbms.mk BBED=$ORACLE_HOME/bin/bbed $ORACLE_HOME/bin/bbed

OracleDatabase 11g中缺省的未提供BBED库文件,但是可以用10g的文件编译出来,需要先从10g中复制如下文件到相应目录,然后再执行上述连接命令,参考如下步骤:

(1)复制Oracle 10g文件

Copy $ORA10g_HOME/rdbms/lib/ssbbded.o to$ORA11g_HOME/rdbms/lib

Copy $ORA10g_HOME/rdbms/lib/sbbdpt.o to $ORA11g_HOME/rdbms/lib

Copy $ORA10g_HOME/rdbms/mesg/bbedus.msb to $ORA11g_HOME/rdbms/mesg

Copy $ORA10g_HOME/rdbms/mesg/bbedus.msg to $ORA11g_HOME/rdbms/mesg

Copy $ORA10g_HOME/rdbms/mesg/bbedar.msb to $ORA11g_HOME/rdbms/mesg

(2)编译

make -f $ORA11g_HOME/rdbms/lib/ins_rdbms.mkBBED=$ORACLE_HOME/bin/bbed $ORACLE_HOME/bin/bbed

三、使用BBED

???????BBEDOracle 内部使用的命令,所以Oracle 不提供技术支持。 为了安全,BBED设置了口令保护,默认密码为blockedit

[oracle@oracledba lib]$ bbed

Password:

BBED: Release 2.0.0.0.0 - Limited Production on Mon Aug 25 04:23:33 2014

Copyright (c) 1982, 2005, Oracle. All rights reserved.

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

一般使用bbed,都是将一些配置信息写入到一个参数文本里,在调用bbed时,指定该参数文件。如:

?????? $bbedparfile=bbed.par

这里我们先演示一个示例。

1)先获取datafile 的信息

datafile 的信息写入一个文件,格式为:文件编号 文件名字 文件大小。可以通过如下SQL 获取:

SQL> select file#||‘ ‘||name||‘ ‘||bytes from v$datafile ;

FILE#||‘‘||NAME||‘‘||BYTES

--------------------------------------------------------------------------------

1 /opt/oracle/oradata/orcla/system01.dbf 555745280

2 /opt/oracle/oradata/orcla/undotbs01.dbf 162529280

3 /opt/oracle/oradata/orcla/sysaux01.dbf 367001600

4 /opt/oracle/oradata/orcla/users01.dbf 17039360

5 /opt/oracle/oradata/orcla/xzsp.dbf 536870912

6 /home/oracle/b101.dbf 52428800

6 rows selected.

注意,这里的file id。 我们这里的file id 和 oracle 系统内部的file id 相同。 当然这个id 我们也可以自己指定。 当我们在bbed 里设置file id 时,就是根据这个参数文件中的的设置来的。 最好设置为相同,不然以后可能会混淆。

将上面查询出来的datafile信息保存到文本里。

cat /u01/filelist.txt

1/u01/app/oracle/oradata/dave2/system01.dbf 1761607680

2/u01/app/oracle/oradata/dave2/undotbs01.dbf 927989760

3/u01/app/oracle/oradata/dave2/sysaux01.dbf 398458880

4 /u01/app/oracle/oradata/dave2/users01.dbf5242880

5/u01/app/oracle/oradata/dave2/example01.dbf 104857600

6 /u01/app/oracle/oradata/dave2/dave01.dbf10485760

7/u01/app/oracle/oradata/dave2/undotbs02.dbf 1048576

8/u01/app/oracle/oradata/dave2/huaining01.dbf 52428800

创建parameter file

[oracle@db2 ~]$ cat /u01/bbed.par

blocksize=8192

listfile=/u01/filelist.txt

mode=edit

示例: 修改Data 内容

1.1 连接bbed

[oracle@db2 ~]$ bbed parfile=/u01/bbed.par

Password:

?

BBED: Release 2.0.0.0.0 - LimitedProduction on Fri Aug 12 18:26:46 2011

?

Copyright (c) 1982, 2005, Oracle. All rights reserved.

?

************* !!! For Oracle Internal Useonly !!! ***************

?

BBED>

?

1.2 查看要修改的内容

SYS@dave2(db2)> select * from test;

?

JOB

--------------------------------------------------------------------------------

Dave is DBA!

Dave like Oracle!

注意: bbed 的修改仅仅是对原有位置内容的一个替换。

?

对应block 的信息如下:

select

rowid,

dbms_rowid.rowid_relative_fno(rowid) rel_fno,

dbms_rowid.rowid_block_number(rowid) blockno,

dbms_rowid.rowid_row_number(rowid) rowno

from test where rownum<2;

ROWID REL_FNO BLOCKNO ROWNO

------------------ ---------- --------------------

AAAN9VAABAAAcKiAAA 1 115362 0

AAAN9VAABAAAcKiAAB 1 115362 1

?

SYS@dave2(db2)>

?

1.3 查找关键字Dave,确定其在block中的偏移量offset。

?

BBED> set dba 1,115362 offset 0

DBA 0x0041c2a2(4309666 1,115362)

OFFSET 0

?

BBED> find /c Dave

File:/u01/app/oracle/oradata/dave2/system01.dbf (1)

Block: 115362 Offsets: 8176 to 8191 Dba:0x0041c2a2

------------------------------------------------------------------------

44617665 20697320 44424121 020616b3

?

<32 bytes per line>

?

dump 查看具体内容:

BBED> dump /v dba 1,115362 offset 8176 count 128

File: /u01/app/oracle/oradata/dave2/system01.dbf(1)

Block: 115362 Offsets: 8176 to 8191 Dba:0x0041c2a2

-------------------------------------------------------

44617665 20697320 44424121 020616b3 l Dave isDBA!...3

<16 bytes per line>

注意这里面的Offsets:8176 to 8191, 它指的是这一行的一个地址。其中

D 的offset 是8176

a 的offset 是8177

v 的offset 是8178

e 的offset 是8179

空格也算offset。

?

1.4 修改block,将Dave 换成DMM

BBED> modify /c ‘DMM ‘ dba 1,115362 offset 8176

File:/u01/app/oracle/oradata/dave2/system01.dbf (1)

Block: 115362 Offsets: 8176 to 8191 Dba:0x0041c2a2

------------------------------------------------------------------------

444d4d20 20697320 44424121 020616b3

<32 bytes per line>

--注意这里DMM我用单引号括起来,并且最后还有一个空格,这样就是4个bytes,不用单引号括起来,无法表示空格,验证一下

?

BBED> dump /v dba 1,115362 offset 8176count 128

File:/u01/app/oracle/oradata/dave2/system01.dbf (1)

Block: 115362 Offsets: 8176 to 8191 Dba:0x0041c2a2

-------------------------------------------------------

444d4d20 20697320 44424121 020616b3 l DMM is DBA!...3

?

<16 bytes per line>

?

1.5 应用变更

BBED> sum dba 1,115362

Check value for File 1, Block 115362:

current = 0xdef7, required = 0x8cc0

此时 current checksum 是0xdef7,requiredchecksum 是0x8cc0

?

BBED> sum dba 1,115362 apply

Check value for File 1, Block 115362:

current = 0x8cc0, required = 0x8cc0

加上apply参数,使checksum一致。即之前的修改生效。

?

?

SYS@dave2(db2)> alter system flush buffer_cache;

System altered.

?

SYS@dave2(db2)> select * from dvd;

JOB

--------------------------------------------------------------------------------

DMM is DBA!

Dave like Oracle!

上面的修改是数据的到正确的修改,如何制造一个坏块。

继续上使用上面的哦数据:

BBED> map

File: /opt/oracle/oradata/orcla/xzsp.dbf (5)

Block: 49316 Dba:0x0140c0a4

------------------------------------------------------------

KTB Data Block (Table/Cluster)

struct kcbh, 20 bytes @0

struct ktbbh, 72 bytes @20

struct kdbh, 14 bytes @100

struct kdbt[1], 4 bytes @114

sb2 kdbr[2] @118

ub1 freespace[8029] @122

ub1 rowdata[37] @8151

ub4 tailchk @8188

BBED> d /v offset 0 count 128

File: /opt/oracle/oradata/orcla/xzsp.dbf (5)

Block: 49316 Offsets: 0 to 127 Dba:0x0140c0a4

-------------------------------------------------------

06a20000 a4c04001 5c732200 00000106 l ......@.\s".....

1ef00000 01000000 e1dd0000 3e732200 l ............>s".

00000000 02003200 a1c04001 02000b00 l ......2...@.....

d3040000 92008000 76021700 02200000 l ........v.... ..

5c732200 00000000 00000000 00000000 l \s".............

00000000 00000000 00000000 00000000 l ................

00000000 00010200 ffff1600 731f5d1f l ............s.].

5d1f0000 0200881f 731f0000 00000000 l ].......s.......

<16 bytes per line>

BBED> modify /x 12345678 offset 0

File: /opt/oracle/oradata/orcla/xzsp.dbf (5)

Block: 49316 Offsets: 0 to 127 Dba:0x0140c0a4

------------------------------------------------------------------------

12345678 a4c04001 5c732200 00000106 1ef00000 01000000 e1dd0000 3e732200

00000000 02003200 a1c04001 02000b00 d3040000 92008000 76021700 02200000

5c732200 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00010200 ffff1600 731f5d1f 5d1f0000 0200881f 731f0000 00000000

<32 bytes per line>

BBED> sum apply

Check value for File 5, Block 49316:

current = 0x1e5c, required = 0x1e5c

SQL> alter system flush buffer_cache;

System altered.

SQL> select * from tt;

select * from tt

*

ERROR at line 1:

ORA-01578: ORACLE data block corrupted (file # 5, block # 49316)

ORA-01110: data file 5: ‘/opt/oracle/oradata/orcla/xzsp.dbf‘

参考:Oracle BBED 工具 说明

Oracle corrupt block(坏块) 详解

Oracle模拟文件损坏BBED


推荐阅读
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • PDF内容编辑的两种小方法,你知道怎么操作吗?
    本文介绍了两种PDF内容编辑的方法:迅捷PDF编辑器和Adobe Acrobat DC。使用迅捷PDF编辑器,用户可以通过选择需要更改的文字内容并设置字体形式、大小和颜色来编辑PDF文件。而使用Adobe Acrobat DC,则可以通过在软件中点击编辑来编辑PDF文件。PDF文件的编辑可以帮助办公人员进行文件内容的修改和定制。 ... [详细]
  • CentOS 6.5安装VMware Tools及共享文件夹显示问题解决方法
    本文介绍了在CentOS 6.5上安装VMware Tools及解决共享文件夹显示问题的方法。包括清空CD/DVD使用的ISO镜像文件、创建挂载目录、改变光驱设备的读写权限等步骤。最后给出了拷贝解压VMware Tools的操作。 ... [详细]
  • 深入理解CSS中的margin属性及其应用场景
    本文主要介绍了CSS中的margin属性及其应用场景,包括垂直外边距合并、padding的使用时机、行内替换元素与费替换元素的区别、margin的基线、盒子的物理大小、显示大小、逻辑大小等知识点。通过深入理解这些概念,读者可以更好地掌握margin的用法和原理。同时,文中提供了一些相关的文档和规范供读者参考。 ... [详细]
  • 原文地址http://balau82.wordpress.com/2010/02/28/hello-world-for-bare-metal-arm-using-qemu/最开始时 ... [详细]
author-avatar
他们叫我红豆
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有