10.2.0.1安装的示例输出如下所示。显示这一输出是为了说明Oracle版本9和10在标志上的差异。换句话说,不能保证从一个版本中提取的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.6的BBED.EXE,这与上一次Windows版本被列入RDBMS软件安装有关,也可以在更高版本的Oracle数据文件中使用该可执行文件。
准备工作就绪后,再看语法和示例。首先:从客户的角度来看,BBED是个未公开的、不受支持的实用程序。如果没有引导借助Oracle Support使用这个工具,DBA会独立运行。如果不知道要做什么,就不要在生产数据库中使用BBED。如果不能承受失败,就不要在任何数据库上使用BBED。提取使用此工具的数据库备份。
如果DBA需要恢复数据,并发现自己陷入困境,迄今做的很多努力也没用,这是最后的解决办法。可能会有更大更好的工具,但“此时此地”的工具就是BBED。
如果需要此工具来保存/救援/恢复生产数据库,对DBA最有利的是先冷备份,然后提取备份的副本作为测试平台。换句话说,操作文件与实际文件分开。如果DBA尝试恢复数据,将其从救援实例转换回生产实例。
关于BBED的Oracle文档,在公共领域内检索,包括在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的文件。提取或识别文件,仔细阅读其内容以得知此工具是如何运行的。信息库末尾是有效的位置参数的列表,其中之一就是HELP。Oracle的Windows安装仍然包含信息库,虽然不再包含BBED.EXE。
开始运行BBED前,有必要大概了解数据块周围的路径,包括如何在一个表中由行获得内部块的信息。这个以及其他信息,通常包括绝对文件号,完整路径和数据文件的名称,块中数据文件的大小,数据块地址,块编号,块大小和块类型等信息。
DBA需要一个报告工具输出有关块的信息。不止一种方法可以得到这个信息,但最简单的是基于使用内置的名为DBMS_ROWID所提供的PL / SQL。
至少在Oracle8i中这十大功能和一个程序的文件包已经可用,但使用这个文件包对DBA而言是全新的。几个功能信息借助OUT参数,在一个过程中结合。围绕DBMS_ROWID.ROWID_INFO创建自己的包装过程,使之可重复使用。
在EMP表中名为Scott的分析师将被晋升为经理。改变SQL * Plus以外的表数据的步骤如下:
1.如果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,认为BBED在0 开始),所以可以使用以下组合:
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
|
Leave a Reply