Oracle BBED在11g中编译以及测试
一、BBED编译
在11g database以上使用bbed需要使用以下10g database的库文件,进行编译以及link
sbbdpt.o、ssbbded.o、bbedus.msb、bbedus.msg
可点击如下链接下载库文件或者通过安装包手动提取
链接:https://pan.baidu.com/s/1hvGP1_Aulx0bz6hjG3bhGQ 密码:a4z8
1、下载oracle database 10g安装包
p8202632_10205_Linux-x86-64.zip
2、解压
[ora11g@ora18c Disk1]$ pwd
/u02/10g/Disk1
3、脚本搜索库文件所在jar包
for jar in $(find . -type f -name "*.jar"|grep rdbms);do
jar -tvf $jar | grep bbedus && echo $jar
done
位置:
./stage/Patches/oracle.rdbms.util/10.2.0.5.0/1/DataFiles/filegroup6.1.1.jar
for jar in $(find . -type f -name "*.jar"|grep rdbms);do
jar -tvf $jar | grep sbbd && echo $jar
done
位置:
./stage/Patches/oracle.rdbms/10.2.0.5.0/1/DataFiles/filegroup48.1.1.jar
4、提取bbed库文件
jar xvf ./stage/Patches/oracle.rdbms/10.2.0.5.0/1/DataFiles/filegroup48.1.1.jar
jar xvf ./stage/Patches/oracle.rdbms.util/10.2.0.5.0/1/DataFiles/filegroup6.1.1.jar
5、将bbed的库文件拷贝到11g目录
$ORACLE_HOME/rdbms/lib/sbbdpt.o
$ORACLE_HOME/rdbms/lib/ssbbded.o
$ORACLE_HOME/rdbms/mesg/bbedus.msb
$ORACLE_HOME/rdbms/mesg/bbedus.msg
6、编译bbed
[ora11g@ora18c lib]$ make -f $ORACLE_HOME/rdbms/lib/ins_rdbms.mk BBED=$ORACLE_HOME/bin/bbed $ORACLE_HOME/bin/bbed
编译过程:
Linking BBED utility (bbed)
rm -f /u02/app/oracle/product/11.2.0/db_1/bin/bbed
gcc -o /u02/app/oracle/product/11.2.0/db_1/bin/bbed -m64 -z noexecstack -L/u02/app/oracle/product/11.2.0/db_1/rdbms/lib/ -L/u02/app/oracle/product/11.2.0/db_1/lib/ -L/u02/app/oracle/product/11.2.0/db_1/lib/stubs/ /u02/app/oracle/product/11.2.0/db_1/lib/s0main.o /u02/app/oracle/product/11.2.0/db_1/rdbms/lib/ssbbded.o /u02/app/oracle/product/11.2.0/db_1/rdbms/lib/sbbdpt.o `cat /u02/app/oracle/product/11.2.0/db_1/lib/ldflags` -lncrypt11 -lnsgr11 -lnzjs11 -ln11 -lnl11 -ldbtools11 -lclntsh `cat /u02/app/oracle/product/11.2.0/db_1/lib/ldflags` -lncrypt11 -lnsgr11 -lnzjs11 -ln11 -lnl11 -lnro11 `cat /u02/app/oracle/product/11.2.0/db_1/lib/ldflags` -lncrypt11 -lnsgr11 -lnzjs11 -ln11 -lnl11 -lnnz11 -lzt11 -lztkg11 -lclient11 -lnnetd11 -lvsn11 -lcommon11 -lgeneric11 -lmm -lsnls11 -lnls11 -lcore11 -lsnls11 -lnls11 -lcore11 -lsnls11 -lnls11 -lxml11 -lcore11 -lunls11 -lsnls11 -lnls11 -lcore11 -lnls11 `cat /u02/app/oracle/product/11.2.0/db_1/lib/ldflags` -lncrypt11 -lnsgr11 -lnzjs11 -ln11 -lnl11 -lnro11 `cat /u02/app/oracle/product/11.2.0/db_1/lib/ldflags` -lncrypt11 -lnsgr11 -lnzjs11 -ln11 -lnl11 -lclient11 -lnnetd11 -lvsn11 -lcommon11 -lgeneric11 -lsnls11 -lnls11 -lcore11 -lsnls11 -lnls11 -lcore11 -lsnls11 -lnls11 -lxml11 -lcore11 -lunls11 -lsnls11 -lnls11 -lcore11 -lnls11 -lclient11 -lnnetd11 -lvsn11 -lcommon11 -lgeneric11 -lsnls11 -lnls11 -lcore11 -lsnls11 -lnls11 -lcore11 -lsnls11 -lnls11 -lxml11 -lcore11 -lunls11 -lsnls11 -lnls11 -lcore11 -lnls11 `cat /u02/app/oracle/product/11.2.0/db_1/lib/sysliblist` -Wl,-rpath,/u02/app/oracle/product/11.2.0/db_1/lib -lm `cat /u02/app/oracle/product/11.2.0/db_1/lib/sysliblist` -ldl -lm -L/u02/app/oracle/product/11.2.0/db_1/lib
7、进入bbed
默认密码blockedit
[ora11g@ora18c trace]$ bbed
Password:
BBED: Release 2.0.0.0.0 - Limited Production on Wed Apr 3 16:47:01 2019
Copyright © 1982, 2011, Oracle and/or its affiliates. All rights reserved.
************* !!! For Oracle Internal Use only !!! ***************
BBED>
二、BBED修改数据测试
1、创建测试表a
SQL> create table a (name varchar2(100));
Table created.
SQL> insert into a values('abc');
1 row created.
SQL> commit;
Commit complete.
SQL> alter system checkpoint;
System altered.
SQL> select * from a;
NAME
--------------------------------------------------
abc -->只有一列数据abc
2、查询表a所在的数据块位置
SQL> select dbms_rowid.rowid_relative_fno(rowid) fno,dbms_rowid.rowid_block_number(rowid) block# from a;
FNO BLOCK#
---------- ----------
5 11310
在5号数据文件、11310数据库
3、查询表a数据行对应的16进制代码
SQL> select dump('abc',16) from dual;
DUMP('ABC',16)
----------------------
Typ=96 Len=3: 61,62,63
表a中name列数据abc,对应的16进制显示为:03616263,bbed中就根据此字符串查找
4、bbed启动参数准备
[root@ora18c ~]# vi /tmp/files.lst
5 /u02/app/oracle/oradata/ora11g/admin.dbf 734003200
以上可根据select file#,name,bytes from v$datafile;对应数据文件
[root@ora18c ~]# vi /tmp/par.bbd
blocksize=8192
listfile=/tmp/files.lst
mode=edit
5、打开bbed
[ora11g@ora18c trace]$ bbed parfile=/tmp/par.bbd
Password: -->blockedit(默认密码)
6、bbed查看数据文件
根据上文查找的数据文件号以及blcok定位到数据块
BBED> set dba 5,11310
DBA 0x01402c2e (20982830 5,11310)
7、查找表a的name列“abc“所在位置
以下用第3步的16进制字符串查找
BBED> find /x 03616263
File: /u02/app/oracle/oradata/ora11g/admin.dbf (5)
Block: 11310 Offsets: 8184 to 8191 Dba:0x01402c2e
------------------------------------------------------------------------
03616263 0106689b
<32 bytes per line>
BBED> f --->再次查找下一个
BBED-00212: search string not found
8、查看数据文件字符
dump命令相当于strings
BBED> dump /v
File: /u02/app/oracle/oradata/ora11g/admin.dbf (5)
Block: 11310 Offsets: 8184 to 8191 Dba:0x01402c2e
-------------------------------------------------------
03616263 0106689b l .abc..h. -->明文显示
<16 bytes per line>
9、查找要替换字符的16进制代码
SQL> select dump('tom',16) from dual;
本次测试将'abc'字符替换为'tom',查出对应16进制代码
DUMP('TOM',16)
----------------------
Typ=96 Len=3: 74,6f,6d
10、关闭数据库
shutdown immediate;
11、通过bbed修改数据文件记录
'tom’的16进制代码修改
BBED> modify /x 03746f6d
File: /u02/app/oracle/oradata/ora11g/admin.dbf (5)
Block: 11310 Offsets: 8184 to 8191 Dba:0x01402c2e
------------------------------------------------------------------------
03746f6d 0106689b
<32 bytes per line>
修改完之后查看strings
BBED> dump /v
File: /u02/app/oracle/oradata/ora11g/admin.dbf (5)
Block: 11310 Offsets: 8184 to 8191 Dba:0x01402c2e
-------------------------------------------------------
03746f6d 0106689b l .tom..h.-->修改完毕
<16 bytes per line>
12、做个sum验证
BBED> sum apply
Check value for File 5, Block 11310:
current = 0x203e, required = 0x203e
13、打开数据库
SQL> startup
14、验证数据
SQL> select * from admin.a;
NAME
--------------------------------------------------
tom
name列已从'abc'替换为'tom'