BBED常见操作

一:安装编译

#cd $ORACLE_HOME/rdbms/lib

#make -f ins_rdbms.mk $ORACLE_HOME/rdbms/lib/bbed
#./bbed parfile=par.bbd

建立2个参数文件 a.txt par.bbd

oracle@vm1 oracle]$ more a.txt

6 /u01/oracle/oradata/test/users01.dbf 26222592


2 /u01/oracle/oradata/test/users01.dbf.bak 26222592

查询数据文件的file_id,file_name ,bytes

[oracle@vm1 oracle]$ more par.bbd


blocksize=8192


listfile=a.txt


mode=edit

二:常见数据块操作

1:根据ROWID查询某行所在的文件号,数据块, 列内容的OFFSET具体位置
数据文件号:

SQL> select DBMS_ROWID.ROWID_RELATIVE_FNO('AAAMjGAAIAAAAAaAAF') from dual;

DBMS_ROWID.ROWID_RELATIVE_FNO('AAAMI6AAIAAAAAKAAC')
---------------------------------------------------
8
块号:
SQL> select DBMS_ROWID.ROWID_BLOCK_NUMBER('AAAMjGAAIAAAAAaAAF') from dual;

DBMS_ROWID.ROWID_BLOCK_NUMBER('AAAMI6AAIAAAAAKAAC')
---------------------------------------------------
10
对象号:
SQL> select DBMS_ROWID.ROWID_OBJECT('AAAMi6AAIAAAAAKAAC') from dual;

DBMS_ROWID.ROWID_OBJECT('AAAMI6AAIAAAAAKAAC')
---------------------------------------------
51386

2:根据DBA 查看 数据文件号,数据块号

select dbms_utility.data_block_address_file(33554442) file#, dbms_utility.data_block_address_block(33554442) block# from dual

3:查找行内容某个字段所在的offset值

根据已知file_id block_id

BBED> set dba 8,777
DBA 0x02000309 (33555209 8,777)

BBED> find /c VALID -----查找不支持NUMBER 和 DATE类型 File: /oradata/datafile/orcl/test01.dbf (8)
Block: 777 Offsets: 1461 to 2010 Dba:0x02000309
------------------------------------------------------------------------
56414c49 44014e01 4e014e2c 000d074f 4c415053 59531841 4c4c244f 4c41505f
46554e43 54494f4e 5f555341 474553ff 04c3054e 5aff0456 49455707 78690a16
17112507 78690a16 17113013 32303035 2d31302d 32323a32 323a3136 3a333605
56414c49 44014e01 4e014e2c 000d074f 4c415053 59531c41 4c4c244f 4c41505f

得到 查找内容offset在 1461 to 2010 之间

BBED> dump /v dba 8,777 offset 1461 count 100 File: /oradata/datafile/orcl/test01.dbf (8)
Block: 777 Offsets: 1461 to 1560 Dba:0x02000309
-------------------------------------------------------
56414c49 44014e01 4e014e2c 000d074f l VALID.N.N.N,...O --每行1后面为前面4*4字节德尔2进制转换后的值,由此可知valid所在的offset 为1461(1个字节=1个offset)
4c415053 59531841 4c4c244f 4c41505f l LAPSYS.ALL$OLAP_

4:修改offset的某个值

VALID为 VALIF

BBED> modify /c VALIF dba 8,777 offset 1461
File: /oradata/datafile/orcl/test01.dbf (8)
Block: 26 Offsets: 1461 to 1560 Dba:0x0200001a
------------------------------------------------------------------------
56414c49 46077869 0a16162d 24133230 30352d31 302d3232 3a32313a 34343a33
35055641 4c494401 4e014e01 4e2c000d 03535953 08444546 524f4c45 24ff02c1
5a02c15a 05544142 4c450778 690a1616 2d240778 690a1616 2d241332 3030352d

BBED> dump /v dba 8,777 offset 1461 count 100
File: /oradata/datafile/orcl/test01.dbf (8)
Block: 777 Offsets: 1461 to 1560 Dba:0x02000309
-------------------------------------------------------
56414c49 46014e01 4e014e2c 000d074f l VALIF.N.N.N,...O --已经修改成功
4c415053 59531841 4c4c244f 4c41505f l LAPSYS.ALL$OLAP_
46554e43 54494f4e 5f555341 474553ff l FUNCTION_USAGES.
04c3054e 5aff0456 49455707 78690a16 l .?NZ..VIEW.xi..
17112507 78690a16 17113013 32303035 l ..%.xi....0.2005
2d31302d 32323a32 323a3136 3a333605 l -10-22:22:16:36.
56414c49 l VALI

还要reset block checksum 才能使修改生效 通过verify块验证


BBED> sum dba 8,777 apply
Check value for File 8, Block 777:
current = 0x09d5, required = 0x09d5

BBED> verify dba 8,777DBVERIFY - Verification starting
FILE = /oradata/datafile/orcl/test01.dbf
BLOCK = 777


DBVERIFY - Verification complete

Total Blocks Examined : 1
Total Blocks Processed (Data) : 1
Total Blocks Failing (Data) : 0
Total Blocks Processed (Index): 0
Total Blocks Failing (Index): 0
Total Blocks Empty : 0
Total Blocks Marked Corrupt : 0
Total Blocks Influx : 0

[@more@]D

请使用浏览器的分享功能分享到微信等