BBED那些事-自用总结
简单的说明
select checkpoint_change# from v$database; --来自controlfile
select checkpoint_change# from v$datafile; --来自controlfile
select checkpoint_change# from v$datafile_orader; --来自datafile header
最常用的关注的几个值的信息
BBED> p kcvfh
struct kcvfh, 676 bytes @0
ub4 kscnbas @484 0x0002be3f --------数据文件头scn
ub4 kcvcptim @492 0x33b69ab8 --------数据文件头checkpoint_time的值
ub4 kcvfhcpc @140 0x0000000b ----------文件头中检查点计数器(kcvfhcpc)的值
ub4 kcvfhccc @148 0x0000000a -----------数据文件头中控制文件备份的计数器(kcvfhccc)的值 比检查点计数器小1
(0)先配置BBED
在11g数据库中
1.上传3个文件到数据库主机
[root@db2 ~] su - oracle
[oracle@db2 ~]$ ls
bbedus.msb sbbdpt.o ssbbded.o
2.拷贝这三个文件分别到不同的目录下
cp bbedus.msb $ORACLE_HOME/rdbms/mesg
cp sbbdpt.o $ORACLE_HOME/rdbms/lib
cp ssbbded.o $ORACLE_HOME/rdbms/lib
3.进入到$ORACLE_HOME/rdbms/lib目录
[oracle@db1 ~]$ cd $ORACLE_HOME/rdbms/lib
4.编译bbed文件
[oracle@db2 lib]$ make -f ins_rdbms.mk $ORACLE_HOME/rdbms/lib/bbed
Linking BBED utility (bbed)
rm -f /u01/oracle/product/10.2.0/rdbms/lib/bbed
gcc -o /u01/oracle/product/10.2.0/rdbms/lib/bbed -m64 -L/u01/oracle/product/10.2.0/rdbms/lib/ -L/u01/oracle/product/10.2.0/lib/ -L/u01/oracle/product/10.2.0/lib/stubs/ /u01/oracle/product/10.2.0/lib/s0main.o /u01/oracle/product/10.2.0/rdbms/lib/ssbbded.o /u01/oracle/product/10.2.0/rdbms/lib/sbbdpt.o `cat /u01/oracle/product/10.2.0/lib/ldflags` -lncrypt11 -lnsgr11 -lnzjs11 -ln11 -lnl11 -ldbtools11 -lclntsh `cat /u01/oracle/product/10.2.0/lib/ldflags` -lncrypt11 -lnsgr11 -lnzjs11 -ln11 -lnl11 -lnro11 `cat /u01/oracle/product/10.2.0/lib/ldflags` -lncrypt11 -lnsgr11 -lnzjs11 -ln11 -lnl11 -lnnz11 -lzt11 -lztkg11 -lztkg11 -lclient11 -lnnetd11 -lvsn11 -lcommon11 -lgeneric11 -lmm -lsnls11 -lnls11 -lcore11 -lsnls11 -lnls11 -lcore11 -lsnls11 -lnls11 -lxml11 -lcore11 -lunls11 -lsnls11 -lnls11 -lcore11 -lnls11 `cat /u01/oracle/product/10.2.0/lib/ldflags` -lncrypt11 -lnsgr11 -lnzjs11 -ln11 -lnl11 -lnro11 `cat /u01/oracle/product/10.2.0/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 /u01/oracle/product/10.2.0/lib/sysliblist` -Wl,-rpath,/u01/oracle/product/10.2.0/lib -lm `cat /u01/oracle/product/10.2.0/lib/sysliblist` -ldl -lm -L/u01/oracle/product/10.2.0/lib
5.如果编译没报错,把bbed文件拷贝到$ORACLE_HOME/bin 目录
[oracle@db2 lib]$ cp bbed $ORACLE_HOME/bin
到此就完成配置了
如何使用?
(1)先获取datafile 的信息
将datafile 的信息写入一个文件如dbfile.txt,格式为:文件编号 文件名字 文件大小。(3列信息中间使用空格隔开)
可以通过如下SQL 获取:
SYS> select file#||' '||name||' '||bytes from v$datafile ;
把以上sql查询结果保存到dbfile.txt
备注:该输出可以自行加条件选择是否只选择需要操作的数据文件,也可以把数据库所有数据文件全部输入
(2) 创建parameter file:
[oracle@db2 ~]$ cat /u01/bbed.par
blocksize=8192
listfile=/u01/filelist.txt
mode=edit
(3)使用parameter file 连接bbed:
[oracle@db2 ~]$ bbed parfile=/u01/bbed.par
Password:
bbed 的默认密码:blockedit
===================================================
进入bbed后,如果要查看2号数据文件,就使用如下命令 set dba 2,1
BBED>set dba 2,1
--set data block address , file_id, block.这里的2指的是文件ID,1指的是1号块
设置file 1,block 60882
BBED> set dba 1,60882
DBA 0x0040edd2(4255186 1,60882)
如果设置成功,会返回该block的RDBA (Relative Data Block Address),rdba就是rowid中的rfile#+block#。
===========================================
查看某些值可以使用p命令跟关键字输出,如下(已做省略处理,只保留关键信息)
BBED> p kcvfh
ub4 kscnbas @484 0x0052dc43
ub4 kcvcptim @492 0x33b9168b
ub4 kcvfhcpc @140 0x0000001d
ub4 kcvfhccc @148 0x0000001c
这里可以看到偏移量为484的输出值为:0052dc43
==================================================
如果要输出查看某个数据文件的某个块信息,使用dump命令
如:查看2号数据文件的1号块,偏移量为484的信息,长度为4位
就使用如下命令查看
BBED>dump dba 2,1 offset 484 count 4
File: /u01/oracle/oradata/orcl/system01.dbf (1)
Block: 1 Offsets: 484 to 487 Dba:0x00300001
------------------------------------------------------------------------
43dc5200
<32 bytes per line>
注:dump输出的值是可以直接用的,不用根据平台做反转之类的操作。
如:从484到487号的值(每2个数字为1位)分别为 43、dc、52、00
dump出来的值(43dc5200)和上面使用p命令输出的值(0052dc43)刚好是2位一组反向来的
====================================================
假如要修改偏移量484的值为:43dd7812,那么使用如下命令
因为每次只能修改2位,所以分2次修改,484为43、485为dd,486为78,486为12
BBED> m /x 43dd OFFSET 484
BBED> m /x 7812 OFFSET 486
=====================================================
修改完成后使用sum apply 重新计算校验并应用即可生效。
BBED>sum apply
=====================================================
附:BBED文件
链接: https://pan.baidu.com/s/1lSaVexL55YuGWK8RCsDeZw 提取码: ynmi 复制这段内容后打开百度网盘手机App,操作更方便哦
--来自百度网盘超级会员v5的分享
以上信息仅为个人理解和输出笔记,仅供参考。
沙发空闲中,快来抢!