一、介绍
BBED是oracle内部工具,BBED(Oracle Block Browerand EDitor Tool),顾名思义就是用来直接查看和修改数据文件数据的工具,可以直接修改数据块的内容,该工具不受oracle支持,是一款内部工具,在特殊恢复中可能会用到,一般情况下还是不用BBED的,所以默认是没有生成BBED的可执行文件,而且从oracle 11G开始就默认不提供BBED的库文件,需要从10G拷贝过来编译。
在oracle 11G以上版本,要编译BBED的执行文件,需要从10G中把库文件拷贝到11g中,需要拷贝的4个文件如下:
ssbbded.o、sbbdpt.o、bbedus.msb、bbedus.msg
注意事项:
① 若使用bbed的过程中,数据库有重启的过程,最好是退出BBED重新进入bbed的环境
② windows下BBED软件和其他系统下BBED不太一样,操作的时候块号比其他系统下多一个,为了更方便的使用bbed,不建议在windows上进行修改
二、安装和配置bbed
2.1 手工安装和配置
安装操作如下:
cp soft/ssbbded.o $ORACLE_HOME/rdbms/lib/ssbbded.o
cp soft/sbbdpt.o $ORACLE_HOME/rdbms/lib/sbbdpt.o
cp soft/bbedus.msb $ORACLE_HOME/rdbms/mesg/bbedus.msb
--cp soft/bbedus.msg $ORACLE_HOME/rdbms/mesg/bbedus.msg
然后执行编译:
make -f $ORACLE_HOME/rdbms/lib/ins_rdbms.mk BBED=$ORACLE_HOME/bin/bbed $ORACLE_HOME/bin/bbed
--配置:
[ora11g@bbed ~]$ cat >> bbed.par <<-EOF
BLOCKSIZE=8192
LISTFILE=/home/ora11g/bbed.txt
MODE=edit
password=blockedit
SPOOL=Y
EOF
sqlplus -s "/ as sysdba" <<-EOF
set head off
set feedback off
set termout off
set echo off
col name for a100
set term off
spool /home/ora11g/bbed.txt
select file#||' ' ||name||' '||bytes from v\$datafile;
spool off
exit
EOF
2.2 脚本安装和配置
#!/bin/bash
#ls $ORACLE_HOME/rdbms/lib/sbbdpt.o
#ls $ORACLE_HOME/rdbms/lib/ssbbded.o
#ls $ORACLE_HOME/rdbms/mesg/bbedus.msb
#定义bbed参数文件存放位置
homePath=`cd ~;pwd`
install_bbed(){
if [ ! -f $ORACLE_HOME/bin/bbed ] ; then
OUTPUTFILE=$ORACLE_HOME/rdbms/lib/sbbdpt.o
if [ ! -f $OUTPUTFILE ] ; then
cat <<-EOF | base64 -d |gzip -dc > $OUTPUTFILE
H4sICBwFLEMCA3NiYmRwdC5vAKt39XFjYmRkgAFGBjsGBA8BjrMg2A5QkgussjgpKaWgRC+ZQa+4
pKgkMQmJrsxFoUtSK0pgZEpiSSKMTCouhhJF+RARGA1SawinQGJwqjinILcAqK4YZHROcVpuYiZD
dmlJbjyQkQc0ITUnEaYBiY3NayDABMQsDB//o4tzAzEzFl3SYHEmDHFtsDgzhrg5WJwFQ9wZLM6K
Ie4LFmfDEI8Fi7NjiGeDxTkwxKeDxTkxxCuBWBBZPdSLbUAsgCV8enGIAwMeTCclpaaA6PzkzNLk
JKB4ZpI+hK1XnK9nqGcAcmMBkOsLih0EYGYgDaDHBAuF+tFDWBCNjx5yHAwUggZM9yDHpgCaOMx/
CjjEDZDEeRjQsyhCPczdATjMScAhXoAkzovFGzD1MHdPQBOXgPIXoInrQPkHcNh7AYf4AxzipAJ0
fcI40iIsHNcTSEfK0DIEHbyHhTsjQh83kv2w8DGEyqGnR3sm4txvC9XPTKZ+D2gaIVd/KNR+Jhz6
LQjoT8Hh/3Ii7S/C4X+4frQIU0BTtxhHWipnRo0/Jmg4caDFHwB1tZ+WRwcAAA==
EOF
fi
OUTPUTFILE=$ORACLE_HOME/rdbms/lib/ssbbded.o
if [ ! -f $OUTPUTFILE ] ; then
cat <<-EOF | base64 -d |gzip -dc > $OUTPUTFILE
H4sICCAFLEMCA3NzYmJkZWQubwCrd/VxY2JkZIABRgY7BgQPAdSZEGwHKMkFVllcnJSUkpqil8yg
V1xSVJKYhERX5qLQJakVJTAyJbEkEUYmFRdDiaJ8iAiMBqk1hFMgMThVXJxTkJtakZqSWgy0uig1
JxEmj8TG5hUQAPmGheHjf3RxHiBmxqJLBizOhCGuAxZnxhC3AIuzYIi7gMVZMcT9wOJsGOJxYHF2
DPEcsDgHhng7WJwTQ7wKiAWR1MNYwKgrSS0uwVAPCgF2BvIBus9FwO7CBA5Qej4W+5GBCjTO0MF9
KK3AiNDHjWS/BJQ2gsqhh/B/RuLcbwfVz0ymfk9omJOrPwxqPxMO/RwE9Kfi8D87E3H2F+PwP0w/
uv3o/MlYzAQBfibUeGKC6uVAiz8Ao6DPwqcEAAA=
EOF
fi
OUTPUTFILE=$ORACLE_HOME/rdbms/mesg/bbedus.msb
if [ ! -f $OUTPUTFILE ] ; then
cat <<-EOF | base64 -d |gzip -dc > $OUTPUTFILE
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
zc0DGxzwf/Ds76fvwAT79PkfAqWSXwAiAAA=
EOF
fi
make -f $ORACLE_HOME/rdbms/lib/ins_rdbms.mk BBED=$ORACLE_HOME/bin/bbed $ORACLE_HOME/bin/bbed &> dev/null
fi
}
config_bbed() {
rm rdba.txt &>/dev/null
read -p "输入路径: " d
read -p "输入dd开始位置: " begin
read -p "输入dd结束位置: " end
if [ -d $d ]
then
for i in `ls $d/*`
do
#echo $i
#从损坏的块之后dd
for (( y=$begin;y<=$end;y=y+1 ))
do
echo -n -e "filename=$i;rdba=" >>${homePath}/rdba.txt
#dd if=$i skip=$y bs=8192 count=1|od -x|head -n 1|awk '{print $5$4}' >>rdba.txt
a=`dd if=$i skip=$y bs=8192 count=1|od -x|head -n 1|awk '{print $5$4}'`
if [ -n $a ]
then
#echo $a >>rdba.txt
echo ${a^^} >>${homePath}/rdba.txt
#echo $i $y已经获取到值,退出
break
fi
done
done
fi
#rdba转换为文件号,块号;
#这个思路就是先16 -> 2 -> 10,最终换算成10进制查看。前10个bit代表相对文件号,后22个bit代表块号
rm ${homePath}/rdban.txt &>/dev/null
cat ${homePath}/rdba.txt|while read i
do
eval $i
xx=`echo "ibase=16;obase=2;" $rdba|bc`
x=`echo "ibase=16;obase=2;" $rdba|bc|wc -L`
y=$[ 32-$x ]
if [ $y -eq 0 ]
then
#echo "$x 有32位!"
#echo $xx
b=`echo $xx|cut -b 1-10`
c=`echo $xx|cut -b 11-32`
((file=2#$b))
((blk=2#$c))
echo -n "filename=$filename;rdba=$rdba;" >> ${homePath}/rdban.txt
echo "rdba1=$xx;file=$file;blk=$blk" >> ${homePath}/rdban.txt
else
yy=`tr -cd '0' < /dev/urandom | head -c $y`
#a=`echo $yy$xx`
b=`echo $yy$xx|cut -b 1-10`
c=`echo $yy$xx|cut -b 11-32`
((file=2#$b))
((blk=2#$c))
echo -n "filename=$filename;rdba=$rdba;" >> ${homePath}/rdban.txt
echo "rdba1=$yy$xx;file=$file;blk=$blk" >> ${homePath}/rdban.txt
#echo $file $blk
fi
done
#生成bbed的参数文件
rm ${homePath}/sort.txt &>/dev/null
rm ${homePath}/bbed.txt &>/dev/null
rm ${homePath}/bbed.par &>/dev/null
cat rdban.txt|while read i
do
eval $i
echo $file $filename >>${homePath}/sort.txt
done
sort -n -k 1 ${homePath}/sort.txt > ${homePath}/bbed.txt
#删除0开头的文件和包含temp的文件名
#sed -ri '/^0|temp/d' bbed.txt
#生成bbed的控制文件
echo "BLOCKSIZE=8192" >>${homePath}/bbed.par
echo "LISTFILE=${homePath}/bbed.txt" >>${homePath}/bbed.par
echo "MODE=edit" >>${homePath}/bbed.par
echo "password=blockedit" >>${homePath}/bbed.par
echo "SPOOL=Y" >>${homePath}/bbed.par
echo "alias bbed='rlwrap bbed'" >>~/.bash_profile
source ~/.bash_profile
#清除排序和rdba生成的脚本
rm ${homePath}/sort.txt &>/dev/null
rm ${homePath}/rdba*.txt
read -p "bbed parfile=bbed.par"
bbed parfile=bbed.par
}
while true
echo -e "\033[42m---------------------------------\033[0m"
echo -e "#\e[32m 1.安装bbed\e[0m #"
echo -e "#\e[33m 2.配置bbed\e[0m #"
echo -e "#\e[33m 路径输入数据文件位置路径,起始输入1,结束随意\e[0m #"
echo -e "#\e[34m 3.卸载bbed\e[0m #"
echo -e "#\e[35m 4.退出\e[0m #"
echo -e "\033[42m---------------------------------\033[0m"
read -p "输入: " oper_name
do
if [ "$oper_name" == "1" ];then
which bbed &>/dev/null
if [ $? -eq 0 ];then
echo "WARNING: bbed installed,not install again!!!"
else
echo "begin install bbed..."
install_bbed
echo "installl bbed succeed..."
fi
elif [ "$oper_name" == "2" ];then
echo "begin config bbed..."
config_bbed
echo "end config bbed..."
elif [ "$oper_name" == "3" ];then
#deinstall bbed
cd $ORACLE_HOME/bin && rm bbed -f
cd $ORACLE_HOME/rdbms/lib && rm sbbdpt.o -f
cd $ORACLE_HOME/rdbms/lib && rm ssbbded.o -f
cd $ORACLE_HOME/rdbms/mesg && rm bbedus.msb -f
#deconfig bbed
rm ${homePath}/bbed.par -f
rm ${homePath}/bbed.txt -f
rm ${homePath}/log.bbd -f
echo "bbed deinstall ok!!!"
elif [ "$oper_name" == "4" ];then
exit -1
else
exit -1
fi
done
wait
三、命令使用
[ora11g@bbed ~]$ bbed help=y
PASSWORD - Required parameter
FILENAME - Database file name
BLOCKSIZE - Database block size
LISTFILE - List file name
MODE - [browse/edit]
SPOOL - Spool to logfile [no/yes]
CMDFILE - BBED command file name
LOGFILE - BBED log file name
PARFILE - Parameter file name
BIFILE - BBED before-image file name
REVERT - Rollback changes from BIFILE [no/yes]
SILENT - Hide banner [no/yes]
HELP - Show all valid parameters [no/yes]
一般使用bbed都是将上面的参数写到一个配置文件里面,然后bbed parfile=路径/文件 去调用执行进入bbed工具;
也可以手工方式进行操作:
set filename '/u01/app/oracle/oradata/orcl11g/system01.dbf'
set blocksize 8192
set spool=y
BBED> help all
1) set命令
SET DBA [ dba | file#, block# ] ---set dba地址或文件号,块号
SET FILENAME 'filename' ---set 数据文件名
SET FILE file# ---set 数据文件号
SET BLOCK [+/-]block# ---set 块号
SET OFFSET [ [+/-]byte offset | symbol | *symbol ] ---set offset(即偏移量)
SET BLOCKSIZE bytes ----set block大小
SET LIST[FILE] 'filename' ----set list文件
SET WIDTH character_count ----设置显示宽度
SET COUNT bytes_to_display ----设置显示bytes数目
SET IBASE [ HEX | OCT | DEC ] ----设置进制模式hex 16进制 oct 8进制 dec 10进制
SET OBASE [ HEX | OCT | DEC ]
SET MODE [ BROWSE | EDIT ] ---设置操作模式 查看模式或编辑模式
SET SPOOL [ Y | N ] ---是否保存操作日志
SHOW [ <SET parameter> | 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 ]
</Nuf>:
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] <target spec>=<source spec>
<target spec> : [ DBA | FILE | FILENAME | BLOCK | OFFSET | symbol | *symbol ]
<source spec> : [ value | <target spec options> ]
SUM [ DBA | FILE | FILENAME | BLOCK ] [ APPLY ]
PUSH [ DBA | FILE | FILENAME | BLOCK | OFFSET ]
POP [ALL]
REVERT [ DBA | FILE | FILENAME | BLOCK ]
UNDO
HELP [ <bbed command> | ALL ]
VERIFY [ DBA | FILE | FILENAME | BLOCK ]
CORRUPT [ DBA | FILE | FILENAME | BLOCK ]
2)map命令
BBED> map v file 1 block 1
File: u02/app/oracle/oradata/zlhis/system01.dbf (1)
Block: 1 Dba:0x00400001
------------------------------------------------------------
Data File Header
3) print命令 该命令通常配合map使用
BBED> help print
PRINT[/x|d|u|o|c] [ DBA | FILE | FILENAME | BLOCK | OFFSET | symbol | *symbol ]
说明:
x ----16进制
d ----10进制
u ----无正负之分的10进制 ---不需关注
o ----8进制
c ----字符 ---不需关注
示例如下:
BBED&get; p x file 1 block 1
4)dump 命令
BBED> help dump
DUMP[/v] [ DBA | FILENAME | FILE | BLOCK | OFFSET | COUNT ]
d v file 1 block 1 offset 2 count 32
5) find 命令 顾名思义即查找我们需要修改或查找的byte
BBED> help find
FIND[/x|d|u|o|c] numeric/character string [ TOP | CURR ]
说明:
x ---16 进制
d ---10进制
u ----无需关注
o ----8进制
c ---字符
top 和curr是什么意思?
top从块开头到块结尾扫描搜索
curr从当前bbed操作的offset开始扫描
示例:
BBED> find x 414c4558
File: oracle/backup/system.dbf (1)
Block: 1 Offsets: 32 to 543 Dba:0x00400001
------------------------------------------------------------------------
414c4558 00000000 4f020000 00f00000 00200000 01000300 00000000 00000000
BBED> find c ALEX
File: oracle/backup/system.dbf (1)
Block: 1 Offsets: 32 to 543 Dba:0x00400001
------------------------------------------------------------------------
414c4558 00000000 4f020000 00f00000 00200000 01000300 00000000 00000000
6)copy 命令 该命令通常用于修改或备份
BBED> help copy
COPY [ DBA | FILE | FILENAME | BLOCK ] TO [ DBA | FILE | FILENAME | BLOCK ]
用法:copy file 1 block 1 to file 5 block 100
坏块,可以使用,copy过来修改相关信息;
7)revert 命令 (回滚操作,将前面的操作全部回退,也可以回滚某一个块的操作,如果没有记录日志,是恢复不了的,默认建议保留日志)
BBED> help revert
REVERT [ DBA | FILE | FILENAME | BLOCK ]
以上面的操作为例,进行回滚:
BBED> REVERT
All changes made in this session will be rolled back. Proceed? (Y/N) y
Reverted file '/oracle/backup/control.ctl', block 1
Warning: contents of previous BIFILE will be lost. Proceed? (Y/N) y
8)modify命令 修改命令 这是最重要的一个命令
BBED> help modify
MODIFY[/x|d|u|o|c] numeric/character string
[ DBA | FILE | FILENAME | BLOCK | OFFSET | symbol | *symbol ]
在处理坏块的时候,这个就是我们必用的命令
BBED> find c TAG
File: oracle/backup/control.ctl (6)
Block: 1 Offsets: 64 to 575 Dba:0x01800001
------------------------------------------------------------------------
54414732 30313031 32313154 32303237 33310000 00000000 00000000 00000000
00000000 5a92c82b 2f2f0b00 00000000 3352f52b 00000000 00000000 00000000
。。。。。
BBED> modify x 999999
File: oracle/backup/control.ctl (6)
Block: 1 Offsets: 64 to 575 Dba:0x01800001
------------------------------------------------------------------------
99999932 30313031 32313154 32303237 33310000 00000000 00000000 00000000
00000000 5a92c82b 2f2f0b00 00000000 3352f52b 00000000 00000000 00000000
把TAG 改成AAA 怎么改?
m c AAA 或者转换程16进制,然后 m x
9) sum 命令 该命令用于计算checksum值或修改以后进行apply
BBED> help sum
SUM [ DBA | FILE | FILENAME | BLOCK ] [ APPLY ]
--不写apply就不会写到当前的块,只是计算
BBED> sum
Check value for File 6, Block 1:
current = 0x7dad, required = 0xa5be --当前 oracle要求(也就是计算后的值)
BBED> sum file 6 block 1 apply
Check value for File 6, Block 1:
current = 0xa5be, required = 0xa5be
10)push 命令
这个命令啥意思
BBED> help push
PUSH [ DBA | FILE | FILENAME | BLOCK | OFFSET ]
示例:
BBED> x /rni *kdxle_off[20]
rowdata[2769] @3775
-------------
flag@3775: 0x00 ()
lock@3776: 0x00
data key:
col 0[3]: 7782
col 1[6]: 0x100002cb.0x0030 (4,715.48)
BBED> push dba 0x100002cb off *kdbr[48]
DBA 0x100002cb (268436171)
OFFSET 2609
11)VERIFY 命令 很常用的一个命令 一般用于校验坏块
BBED> help VERIFY
VERIFY [ DBA | FILE | FILENAME | BLOCK ]
示例:
BBED> verify dba 0x01800001
DBVERIFY - Verification starting
FILE = /oracle/backup/control.ctl
BLOCK = 1
DBVERIFY - Verification complete
Total Blocks Examined : 1
Total Blocks Processed (Data) : 0
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
12)CORRUPT 命令 (没实际用处,感觉是标记坏块,做实验用)
BBED> help CORRUPT
CORRUPT [ DBA | FILE | FILENAME | BLOCK ]
示例:
BBED> CORRUPT file 6 block 1 ++++该命令可以用来标记坏块
Block marked media corrupt.
BBED&get; verify file 6 block 1
DBVERIFY - Verification starting
FILE = /oracle/backup/control.ctl
BLOCK = 1
Block Checking: DBA = 25165825, Block Type = Control file block
Found block already marked corrupted
DBVERIFY - Verification complete
那么oracle标记坏块的本质是什么? 就是修改p kcbh 的seq_kcbh offset 14位置为0xff
那么标记坏块之后,如何修复?
m /x 01 offset 14
m /x 01 offset 8188
sum apply
v
--验证:
select * from ;




