![dc0bde362a5888893dd03c56a7825295.png](https://i-blog.csdnimg.cn/blog_migrate/490182927f7b8ffc8aa39f480b91c1fc.jpeg)
蒋蒋~~各位大神你们吼啊,又是我,智商233的天才少呂,今天我又来给大家看下我近期学到的内容
![c8dc05b708e3e3f65b642da24ebf6567.gif](https://i-blog.csdnimg.cn/blog_migrate/e5ad184a32c77e208cd99fb35079d48b.gif)
那就是BBED
自我介绍:BBED是Block Browser/Editor的缩写,是Oracle的一个内部工具,不对外发布文档及支持。 BBED随软件发布,但是我们需要进行简单的relink才能使用。
这个就很厉害了哟~可以修复Oracle坏块,有一次就是数据库打不开了,找了好多方法有幸接触到了BBED,修改了文件头,拯救了我的测试库哈哈哈
![5518d641f902fac3fd9536aa548f5fe0.gif](https://i-blog.csdnimg.cn/blog_migrate/a13b93bc6b33e54186e8d9061d044a98.gif)
所以今天就给大家分享下怎么用这个东东
=============准备
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
----10g可以直接编译链接,11g需要将lib复制到以上指定目录
make -f $ORA10g_HOME/rdbms/lib/ins_rdbms.mk BBED=$ORACLE_HOME/bin/bbed $ORACLE_HOME/bin/bbed
============配置
bbed parfile=/home/oracle/bbed.par
默认密码blockedit
构造bbed.par文件
[oracle@localhost ~]$ cat bbed.par
blocksize=8192
listfile=/home/oracle/filelist.txt
mode=edit
构造filelist.txt文件
[oracle@localhost ~]$ cat filelist.txt
1 /u01/app/oracle/oradata/PROD/datafile/o1_mf_system_dc7nllr2_.dbf 775946240
2 /u01/app/oracle/oradata/PROD/datafile/o1_mf_sysaux_dc7nllw6_.dbf 513802240
3 /u01/app/oracle/oradata/PROD/datafile/o1_mf_undotbs1_dc7nllwf_.dbf 31457280
4 /u01/app/oracle/oradata/PROD/datafile/o1_mf_users_dc7nllxz_.dbf 5242880
5 /home/oracle/test.dbf 5242880
使用set filelist 也需要filelist.txt,数据文件的信息单独在一个txt里
---------使用以下sql生成
select file#||' '||name||' '||bytes from v$datafile;
---------获取需要修改数据块的file#,block#
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 wzy.t1;
============使用
---------------------设置块位与偏移量
set dba 5,135 offset 0
set offset 8172
---------------------显示块信息类
map中的所有解都都可以进行p(print)
p kcbh
p kdbh
p kdbr显示row directory
p *kdbr[0]某行数据的偏移量
x /rc进行一次examine
x /3rc进行3次examine,用于显示数据,p到最后一行,进行N次(等于行数)的输
----------------------修改数据
find /c chen
找到字段后,offset会偏移
modify /c 'zhen' dba 5,135 offset 8172
dump /v dba 1,115362 offset 8176count 128
---------------------恢复删除数据
find /c chen
找到字段后,offset会偏移
-----------------------修改校验
sum dba 5,135检查checksum
sum dba 5,135 apply应用required checksum
-----------------------tailcheck
tailcheck=bas_kcbh(后4位)+seq_kcbh+type_kcbh
要根据数据文件字节序,将tailcheck调整,小字节序要倒序,一个字节2个比特
![bc9b47567117c57e042802adc563fb4b.png](https://i-blog.csdnimg.cn/blog_migrate/3af3a676164ef6bca5ba60d90776b215.jpeg)
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
可以使用help来查看bbed的命令语法:
BBED> help all
SET DBA [ dba | file#, block# ]
SET FILENAME 'filename'
SET FILE file#
SET BLOCK [+/-]block#
SET OFFSET [ [+/-]byte offset | symbol | *symbol ]
SET BLOCKSIZE bytes
SET LIST[FILE] 'filename'
SET WIDTH character_count
SET COUNT bytes_to_display
SET IBASE [ HEX | OCT | DEC ]
SET OBASE [ HEX | OCT | DEC ]
SET MODE [ BROWSE | EDIT ]
SET SPOOL [ Y | N ]
SHOW [ | ALL ]
INFO
MAP[/v] [ DBA | FILENAME | FILE | BLOCK ]
DUMP[/v] [ DBA | FILENAME | FILE | BLOCK | OFFSET | COUNT ]
PRINT[/x|d|u|o|c] [ DBA | FILE | FILENAME | BLOCK | OFFSET | symbol | *symbol ]
EXAMINE[/Nuf] [ DBA | FILE | FILENAME | BLOCK | OFFSET | symbol | *symbol ]
:
N - a number which specifies a repeat count.
u - a letter which specifies a unit size:
b - b1, ub1 (byte)
h - b2, ub2 (half-word)
w - b4, ub4(word)
r - Oracle table/index row
f - a letter which specifies a display format:
x - hexadecimal
d - decimal
u - unsigned decimal
o - octal
c - character (native)
n - Oracle number
t - Oracle date
i - Oracle rowid
FIND[/x|d|u|o|c] numeric/character string [ TOP | CURR ]
COPY [ DBA | FILE | FILENAME | BLOCK ] TO [ DBA | FILE | FILENAME | BLOCK ]
MODIFY[/x|d|u|o|c] numeric/character string
[ DBA | FILE | FILENAME | BLOCK | OFFSET | symbol | *symbol ]
ASSIGN[/x|d|u|o] =
: [ DBA | FILE | FILENAME | BLOCK | OFFSET | symbol | *symbol ]
: [ value | ]
SUM [ DBA | FILE | FILENAME | BLOCK ] [ APPLY ]
PUSH [ DBA | FILE | FILENAME | BLOCK | OFFSET ]
POP [ALL]
REVERT [ DBA | FILE | FILENAME | BLOCK ]
UNDO
HELP [ | ALL ]
VERIFY [ DBA | FILE | FILENAME | BLOCK ]
CORRUPT [ DBA | FILE | FILENAME | BLOCK ]
善用BBED可以从很多棘手的问题中拯救我们的数据库,作为Oracle DBA需要了解这样一个工具的存在
![df7f47afae0fbb0b7a779e183994c4d0.png](https://i-blog.csdnimg.cn/blog_migrate/d97a97534f26138654970abe71520fca.jpeg)