首页 > 数据库 > Oracle > Oracle BBED 的安装使用
在linux上面有,需要编译。
在9i/10g中直接编译生成bbed:
cd $ORACLE_HOME/rdbms/lib
make -f ins_rdbms.mk $ORACLE_HOME/rdbms/lib/bbed
示例:
[oracle@db2 ~]$ cd $ORACLE_HOME/rdbms/lib
[oracle@db2 lib]$ make -f ins_rdbms.mk $ORACLE_HOME/rdbms/lib/bbed
Linking BBED utility (bbed)
rm -f /u01/app/oracle/product/10.2.0/db_1/rdbms/lib/bbed
gcc -o/u01/app/oracle/product/10.2.0/db_1/rdbms/lib/bbed-L/u01/app/oracle/product/10.2.0/db_1/rdbms/lib/-L/u01/app/oracle/product/10.2.0/db_1/lib/-L/u01/app/oracle/product/10.2.0/db_1/lib/stubs/ -L/usr/lib -lirc /u01/app/oracle/product/10.2.0/db_1/lib/s0main.o/u01/app/oracle/product/10.2.0/db_1/rdbms/lib/ssbbded.o/u01/app/oracle/product/10.2.0/db_1/rdbms/lib/sbbdpt.
cat/u01/app/oracle/product/10.2.0/db_1/lib/sysliblist`-Wl,-rpath,/u01/app/oracle/product/10.2.0/db_1/lib -lm `cat /u01/app/oracle/product/10.2.0/db_1/lib/sysliblist`-ldl -lm -L/u01/app/oracle/product/10.2.0/db_1/lib ......
[oracle@db2 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
Linking BBED utility (bbed)
rm -f /u01/app/oracle/product/10.2.0/db_1/bin/bbed
gcc -o/u01/app/oracle/product/10.2.0/db_1/bin/bbed-L/u01/app/oracle/product/10.2.0/db_1/rdbms/lib/-L/u01/app/oracle/product/10.2.0/db_1/lib/-L/u01/app/oracle/product/10.2.0/db_1/lib/stubs/ -L/usr/lib -lirc /u01/app/oracle/product/10.2.0/db_1/lib/s0main.o/u01/app/oracle/product/10.2.0/db_1/rdbms/lib/ssbbded.o/u01/app/oracle/product/10.2.0/db_1/rdbms/lib/sbbdpt.o `cat/u01/app/oracle/product/10.2.0/db_1/lib/ldflags` -lnsslb10 -lncrypt10 -lnsgr10 -lnzjs10-ln10 -lnnz10 -lnl10 /u01/app/oracle/product/10.2.0/db_1/rdbms/lib/defopt.o-ldbtools10 -lclntsh ......
[oracle@db2 ~]$ cd $ORACLE_HOME/rdbms/lib
[oracle@db2 lib]$ ls -lrt bbed
-rwxr-xr-x 1 oracle oinstall 536161 Aug 1118:30 bbed
[oracle@db2 lib]$ cd $ORACLE_HOME/bin
[oracle@db2 lib]$ ls -lrt bbed
-rwxr-xr-x 1 oracle oinstall 536161 Aug 11 18:33bbed
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)编译
[oracle@db2 lib]$ make -f $ORA11g_HOME/rdbms/lib/ins_rdbms.mkBBED=$ORACLE_HOME/bin/bbed $ORACLE_HOME/bin/bbed
无论什么版本,编译后将$ORACLE_HOME/rdbms/lib添加到环境变量PATH中之后再使用bbed就可以直接运行。
下面是几个常用的:
set 设定当前的环境
show 查看当前的环境参数,跟sqlplus的同名命令类似。
dump 列出指定block的内容
find 在指定的block中查找指定的字符串,结果是显示出字符串,及其偏移量--offset,偏移量就是在block中的字节数
modify 修改指定block的指定偏移量的值,可以在线修改。
copy 把一个block的内容copy到另一个block中
verify 检查当前环境是否有坏块
sum 计算block的checksum,modify之后block就被标识为坏块,current checksum与reqired checksum不一致,sum命令可以计算出新的checksum并应用到当前块。
undo 回滚当前的修改操作,如果手误做错了,undo一下就ok了,回到原来的状态。
revert 回滚所有之前的修改操作,意思就是 undo all
1 set dba
SQL> 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 EMP where rownum=1 ;
ROWID REL_FNO BLOCKNO ROWNO
------------------ ---------- ---------- ----------
AAAMlsAAEAAAAAgAAA 4 32 0
1 rows selected.
SQL> select dbms_utility.make_data_block_address(4,32) from dual;
DBMS_UTILITY.MAKE_DATA_BLOCK_ADDRESS(4,32)
------------------------------------------
16777248
在BBED中查找相关block信息,注意文件号必须是已经记录在filelist.txt中的。
BBED> set dba 4,32
DBA 0x01000020 (16777248 4,32)
设置file 1,block 60882,设置成功,会返回该block的RDBA (Relative Data Block Address),rdba就是rowid中的rfile#+block#。括号里面的是DBA值和block 和 file id。
2 set filename
BBED> set filename '/home/oracle/oradata/ora10g/info_01.dbf' //单括号引起来
FILENAME /home/oracle/oradata/ora10g/info_01.dbf
3 set file
BBED> set file 4
FILE# 4 -- 这里的number,是我们之前配置的filelist文件里的number。它可以和我们db 里的file id 不一样, 不过最好是配置一样的。
4 set block
BBED> set file 4
FILE# 4
BBED> set block 32
BLOCK# 32
BBED> set block +10
BLOCK# 42
BBED> set block -5
BLOCK# 37 --这里的block 是一个相对的位置,我们需要先指定一个file,然后在指定block。 即对应file里的block。可以对当前block的位置进行+和-操作。
5 set offset
BBED> set offset 20
OFFSET 20
BBED> set offset +2
OFFSET 22
BBED> set offset -2
OFFSET 20 --偏移量是相对某个block里的偏移量,可以用+和-进行操作
6 set blocksize
BBED> set blocksize 8192
BLOCKSIZE 8192 --设置当前datafile 的blocksize 大小,该大小必须和datafile 的实际block 匹配,否则会报错。
7 set listfile
BBED> set listfile '/home/oracle/filelist.txt'
LISTFILE /home/oracle/filelist.txt --对于listfile的文件,必须用单引号括起来。
8 set width
BBED> set width 200
WIDTH 200 --设定当前屏幕的宽度,默认是80.
9 set count
BBED> set count 512
COUNT 512 --设置dump 命令显示bytes的数量。默认是512 bytes
10 set mode
Map会通过偏移量来显示block里的详细信息,如block header,data block header 和row directory。 使用/v 选项,可以查看更详细的信息。
在不指定block的情况下,会显示当前block的信息,如果想显示其他block的信息,可以使用file name,file id,block 和DBA 来指定要显示的block。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29289867/viewspace-1978370/ ,如需转载,请注明出处,否则将追究法律责任。