Oracle BBED工具详解

如果自己搞不定可以找诗檀软件专业ORACLE数据库修复团队成员帮您恢复!

诗檀软件专业数据库修复团队

服务热线 : 13764045638    QQ号:47079569    邮箱:[email protected]

还有关于 Oracle BBED Verify Command BBED Editor Tools 的文档

OracleBBED实用程序(块浏览器和编辑器)在Oracle的所有版本中,从Oracle7Oracle10gOracle 11g中删除了可执行的,但你可以在ins_rdbms.mk生成文件(位于$ ORACLE_HOME / RDBMS / lib目录下)中搜索,你能看到BBED条目。

专供内部使用,BBED可用于多种功能,包括合法的和非法的:

  • BBED最开始的目的是供Oracle Technical support 用来浏览,诊断(和修复)数据块损坏的问题。
  • BBED是个大数据块浏览器,供那些有兴趣用数据和索引块来审查内部结构的人使用。然而 “alter system dump” 命令也可以转储数据块内容。永远不要在EDIT模式下使用BBED,除非你是与Oracle technical support共同使用
  • 一些DBA使用BBED来损坏数据和索引块,测试RMAN从自感应数据损坏中的恢复。 
  • 黑客可能会使用BBED闯入Oracle数据库。BBED这样的工具可以用来在数据块中直接查看数据(后来绕过Oracle),因为BBED直接在数据块中写。黑客可以使用BBED来更新数据库,无记录也无审计。

使用并连接BBED

标题为拆卸Oracle数据块的文章,有安装和使用BBED的完整说明。该操作命令告诉我们如何连接并编辑BBED:

make -f ins_rdbms.mk BBED=$ORACLE_HOME/bin/BBED $ORACLE_HOME/bin/BBED

This page此页面显示BBED命令语法和用法选项。

BBED 安全建议:  使用BBED时,永远留在BROWSE 模式,而且只能使用BBED EDIT模式(有VERREP)如果你知道你在做什么。

BBED 密码

由于BBED的力量太大,它被设计成有能力的用户才能够找到密码。有经验的软件工程师可以在短短一分钟内找到BBED密码。如果你不能在10分钟内提取BBED密码,你可能不够熟练,不能安全使用BBED工具。

小心BBED的力量

BBED实用程序很容易就会损坏数据库,永远不要将其应用到一个脆弱的数据

使用 BBED:

10.2.0.1安装的示例输出如下所示。显示这一输出是为了说明Oracle版本910在标志上的差异。换句话说,不能保证从一个版本中提取的BBED可以用在另一版本上,但是欢迎尝试。

[oracle@oralinux lib]$ make -f ins_rdbms.mk
$ORACLE_HOME/rdbms/lib/BBED

为了确认创建,查看是否已创建BBED可执行文件。在这个例子中,make命令在rdbms/lib目录中被执行。 BBED可以放在任何一个DBA喜欢的地方。此外,如果需要的话更改权限。

-rwxr-xr-x 1 oracle dba 434057 Aug 25 16:26 BBED

为了证实该实用程序确实运行,要调用它。本例使用10g版本,这表明发行2.0.0.0.0版本,9.0.4版本也是如此。除了著作权的变化,发行的版本在相当长的一段时间没有改变。

[oracle@oralinux lib]$ ./BBED

Password:

BBED: Release 2.0.0.0.0 – Limited Production on Wed Aug 27 16:17:06 2015

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

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

BBED>

请注意,会提示用户输入密码。几乎所有在网上搜到的BBED参考文献都会提到,如果一个人首选使用BBED的动机够强,那他一定够聪明能确定自己的密码。密码是blockedit。它被看作是在BBED十六进制转储文件中的BLOCKEDIT。在/ usr/ bin中使用XXD创建BBED转储,然后在文件中查找‘BBED>“。上面的几行就是BLOCKEDIT

里程数可能会有所不同,但可以使用装载了Oracle8.1.6BBED.EXE,这与上一次Windows版本被列入RDBMS软件安装有关,也可以在更高版本的Oracle数据文件中使用该可执行文件。

准备工作就绪后,再看语法和示例。首先:从客户的角度来看,BBED是个未公开的、不受支持的实用程序。如果没有引导借助Oracle Support使用这个工具,DBA会独立运行。如果不知道要做什么,就不要在生产数据库中使用BBED。如果不能承受失败,就不要在任何数据库上使用BBED。提取使用此工具的数据库备份。

如果DBA需要恢复数据,并发现自己陷入困境,迄今做的很多努力也没用,这是最后的解决办法。可能会有更大更好的工具,但此时此地的工具就是BBED

如果需要此工具来保存/救援/恢复生产数据库,对DBA最有利的是先冷备份,然后提取备份的副本作为测试平台。换句话说,操作文件与实际文件分开。如果DBA尝试恢复数据,将其从救援实例转换回生产实例。

关于BBEDOracle文档,在公共领域内检索,包括在MetaLink上搜,或是我们现在知道的My Oracle Support,几乎找不到。 MetaLink文档62015.1有(假设它仍然存在于OSS内)一个说明,“BBED只是一个支持工具,不应与客户进行讨论。文档内容在邮件列表中可用,而且支持协议可以这本书内阻止其出版。 (详见http://www.freelists.org/post/oracle-l/is-it-the-bbed    )

尽管如此,有关此工具和其他工具的信息可以从Oracle软件附带的信息库中收集到。$ORACLE_HOME/rdbms/mesg 包含一个名为BBEDus.msg的文件。提取或识别文件,仔细阅读其内容以得知此工具是如何运行的。信息库末尾是有效的位置参数的列表,其中之一就是HELPOracleWindows安装仍然包含信息库,虽然不再包含BBED.EXE

开始运行BBED前,有必要大概了解数据块周围的路径,包括如何在一个表中由行获得内部块的信息。这个以及其他信息通常包括绝对文件号,完整路径和数据文件的名称,块中数据文件的大小,数据块地址,块编号,块大小和块类型等信息。

DBA需要一个报告工具输出有关块的信息。不止一种方法可以得到这个信息,但最简单的是基于使用内置的名为DBMS_ROWID所提供的PL / SQL

至少在Oracle8i中这十大功能和一个程序的文件包已经可用,但使用这个文件包对DBA而言是全新的。几个功能信息借助OUT参数,在一个过程中结合。围绕DBMS_ROWID.ROWID_INFO创建自己的包装过程,使之可重复使用。

EMP表中名为Scott的分析师将被晋升为经理。改变SQL * Plus以外的表数据的步骤如下:

  • 如果ROWID未知,获取其信息
  • 2.   关闭数据库,并采取冷备份  

3.  用参数文件启动bbed,请务必提供相关的数据文件  

4.   找到数据块地址  

5.  在字符串分析师开始的地方找到偏移,并确认数据/位置

6.     模式更改为编辑,除非parfile已包含该信息

7.      修改数据

8.      确认数据变化

9.     运用此变化

10.  重新启动数据库,并查找此变化

所选择的方法是用户对这些数据已经有所了解,例如,用户想要更改的记录,以及ROWID/ DBA信息。这个例子中dba仍然是4,32

关闭数据库并采取冷备份,同时使用跟以前一样的PARFILE后,就可以启动一个BBED会话。启动后,浏览到DBA4,32并设置偏移为0,这样DBA就有一个已知的起始位置供搜索/查找操作遵循。

[oracle@oralinux bbed]$ bbed parfile=bbed.par

Password:

BBED: Release 2.0.0.0.0 – Limited Production on Sun Aug 31 17:55:58 2015

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

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

BBED> set dba 4,32

        DBA             0x01000020 (16777248 4,32)

BBED> set offset 0

        OFFSET          0

find命令将会转储多行。搜索字符串时,可以使用C标志。

BBED> find /c SCOTT

File: /opt/app/oracle/oradata/ORCL2/users01.dbf (4)

Block: 32               Offsets: 7864 to 8191           Dba:0x01000020

————————————————————————

53434f54 5407414e 414c5953 5403c24c 430777bb 04130101 0102c21f ff02c115

2c010803 c24e5305 434c4152 4b074d41 4e414745 5203c24f 280777b5 06090101

0103c219 33ff02c1 0b2c0108 03c24d63 05424c41 4b45074d 414e4147 455203c2

4f280777 b5050101 010103c2 1d33ff02 c11f2c01 0803c24d 37064d41 5254494e

0853414c 45534d41 4e03c24d 630777b5 091c0101 0103c20d 3302c20f 02c11f2c

010803c2 4c43054a 4f4e4553 074d414e 41474552 03c24f28 0777b504 02010101

03c21e4c ff02c115 2c010803 c24c1604 57415244 0853414c 45534d41 4e03c24d

630777b5 02160101 0103c20d 3302c206 02c11f2c 010803c2 4b640541 4c4c454e

0853414c 45534d41 4e03c24d 630777b5 02140101 0102c211 02c20402 c11f2c01

0803c24a 4605534d 49544805 434c4552 4b03c250 030777b4 0c110101 0102c209

ff02c115 1006dbbf

<32 bytes per line>

转储当前偏移并确认SCOTT被找到。

BBED> dump /v dba 4,32 offset 7864 count 32

File: /opt/app/oracle/oradata/ORCL2/users01.dbf (4)

Block: 32      Offsets: 7864 to 7895  Dba:0x01000020

——————————————————-

53434f54 5407414e 414c5953 5403c24c l SCOTT.ANALYST.?

430777bb 04130101 0102c21f ff02c115 l C.w?……?..?

<16 bytes per line>

输出向DBA表明,SCOTT开始于DBA内的7864偏移。计数超过六个位置就是ANALSYT开始的地方。为了证实这一点,将偏移(具体地说,可以增加或减少位置,如+4-3)移动到7870,并再次转储内容。

BBED> set offset 7870

        OFFSET          7870

BBED> d /v

File: /opt/app/oracle/oradata/ORCL2/users01.dbf (4)

Block: 32      Offsets: 7870 to 7901  Dba:0x01000020

——————————————————-

414e414c 59535403 c24c4307 77bb0413 l ANALYST.?C.w?..

01010102 c21fff02 c1152c01 0803c24e l ….?..?,…?

<16 bytes per line>

注意最后一个转储命令使用的句法。如果不知道位置,可以在第一次转储中将其设置为完成。现在是时候用MANAGER 替换ANALYST,这是通过修改命令来完成的。现在修改它并转储以确认变化。修改可以通过多种格式(同FIND)完成,所以可读性最简单的情况就是找到它并通过字符串进行修改,这就是/ C的操作。不要忘了,如果有必要更改编辑模式(BBED> set mode edit)。

BBED> modify /c MANAGER

Warning: contents of previous BIFILE will be lost. Proceed? (Y/N) Y

File: /opt/app/oracle/oradata/ORCL2/users01.dbf (4)

Block: 32               Offsets: 7870 to 7901           Dba:0x01000020

————————————————————————

4d414e41 47455203 c24c4307 77bb0413 01010102 c21fff02 c1152c01 0803c24e

<32 bytes per line>

BBED> d /v

File: /opt/app/oracle/oradata/ORCL2/users01.dbf (4)

Block: 32      Offsets: 7870 to 7901  Dba:0x01000020

——————————————————-

4d414e41 47455203 c24c4307 77bb0413 l MANAGER.?C.w?..

01010102 c21fff02 c1152c01 0803c24e l ….?..?,…?

<16 bytes per line>

现在计算总和,这是用来检查或设置块的校验总和值,并应用变化。

BBED> sum

Check value for File 4, Block 32:

current = 0x26b5, required = 0x32ae

BBED> sum apply

Check value for File 4, Block 32:

current = 0x32ae, required = 0x32ae

到现在为止还挺好。假设数据块中有变化,有两种正确的方式来检查值,但不能使用转储命令。一种是使用SQL * Plus,但是在BBED内,用户可以打印行数据。 SCOTT的行数目仍然是8(或7,认为BBED0 开始),所以可以使用以下组合:

BBED> p *kdbr[7]

rowdata[235]

————

ub1 rowdata[235]                            @7856     0x2c

BBED> x /rnccntnnn

rowdata[235]                                @7856

————

flag@7856: 0x2c (KDRHFL, KDRHFF, KDRHFH)

lock@7857: 0x01

cols@7858:    8

col    0[3] @7859: 7788

col    1[5] @7863: SCOTT

col    2[7] @7869: MANAGER

col    3[3] @7877: 7566

col    4[7] @7881: 19-APR-87

col    5[2] @7889: 3000

col    6[0] @7892: *NULL*

col    7[2] @7893: 20


Posted

in

by

Tags:

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *