BBED工具的使用
- BBED工具介绍:
- Oracle BBED(Oracle Block Browser and Editor)工具是Oracle内部提供的数据块级别查看和修改的工具;通过这个工具,我们可以方便的查看Oracle块级别的存储信息,从而更好的了解Oracle Internal结构技术细节;
- Oracle不推荐使用此工具,它只用来给内部进行恢复处理使用,对外是不提供资料和相关文档的;所以当遇到故障时,优先采用备份恢复,最后再考虑使用此工具;
- 只有Linux/Unix平台下提供BBED工具,在Windows平台没有对应的版本;所以使用BBED的环境通常是命令行方式,而且BBED在Oracle内部是没有编译的,需要手工编译;
- Oracle10g下编译BBED(适合10g以前版本):
- BBED对应对象文件通常在$ORACLE_HOME/rdbms/lib目录下,所以先进入此目录:cd $ORACLE_HOME/rdbms/lib;
- 然后使用linux系统的make进行编译和连接,生成bbed可执行文件:make -f ins_rdbms.mk $ORACLE_HOME/rdbms/lib/bbed;
- 为了使用方便,添加一个硬链接:link $ORACLE_HOME/rdbms/lib/bbed $ORACLE_HOME/bin/bbed;
- 查看此工具:which bbed;
- Oracle11g下编译BBED:
- 11g中直接编译后报错,缺少$ORACLE_HOME/rdbms/lib/ssbbded.o,$ORACLE_HOME/rdbms/lib/sbbdpt.o,$ORACLE_HOME/rdbms/mesg/bbedus.msb和$ORACLE_HOME/rdbms/mesg/bbedus.msg等文件;
- 因为缺少必要的库文件,所以需要从10g环境中拷贝相应的文件到对应的目录; 从10g中拷贝文件到11g对应的目录中:scp oracle@singleton10g:/u01/app/oracle/product/10.2.0/db_1/rdbms/lib/ssbbded.o $ORACLE_HOME/rdbms/lib;scp oracle@singleton10g:/u01/app/oracle/product/10.2.0/db_1/rdbms/lib/sbbdpt.o $ORACLE_HOME/rdbms/lib;scp oracle@singleton10g:/u01/app/oracle/product/10.2.0/db_1/rdbms/mesg/bbedus.msb $ORACLE_HOME/rdbms/mesg;scp oracle@singleton10g:/u01/app/oracle/product/10.2.0/db_1/rdbms/mesg/bbedus.msg $ORACLE_HOME/rdbms/mesg;
- 然后进入$ORACLE_HOME/rdbms/lib目录进行编译:cd $ORACLE_HOME/rdbms/lib;make -f ins_rdbms.mk $ORACLE_HOME/rdbms/lib/bbed;
- 创建链接文件并查看:link $ORACLE_HOME/rdbms/lib/bbed $ORACLE_HOME/bin/bbed;which bbed;
- 11g中直接编译后报错,缺少$ORACLE_HOME/rdbms/lib/ssbbded.o,$ORACLE_HOME/rdbms/lib/sbbdpt.o,$ORACLE_HOME/rdbms/mesg/bbedus.msb和$ORACLE_HOME/rdbms/mesg/bbedus.msg等文件;
- 使用bbed工具:
- 工具默认的密码是blockedit;
- 查看bbed工具参数:bbed help=yes;
- 查看bbed帮助:help all;
- 指定数据库文件列表bbed.lst,通过SELECT file# || chr(9) || NAME || chr(9) || bytes FROM v$datafile;语句查看数据库文件信息;
- 编写bbed参数文件bbed.conf;
- 使用bbed:bbed parfile=bbed.conf;
- tip:修改数据块之后,Oracle会认为它是坏块,需要重新计算checksum值,然后可以使用;
- BBED工具使用示例:
- 手动把bootstrap$表中line#=-1的记录从8.0.0.0.0修改为9.0.0.0.0导致系统无法正常启动;
- 设置数据文件列表和参数文件,打开bbed工具;
- 我们知道,11g中bootstrap$位于file 1 block 520,所以使用find命令从这里开始搜索(find /c 9.0.0.0.0),最终搜索到的位置为file 1 block 521 offset 8179;
- 设置当前位置,并导出内容:set file 1 block 521 offset 8179;dump;
- 将此处的9修改为8:modify /c “8” offset 8179;
- 修改之后,Oracle会认为该块已经损坏:verify;
- 重新计算和应用校验位后,数据块可以恢复一致:sum apply;
- 之后数据库可以正常启动;
- 手动把bootstrap$表中line#=-1的记录从8.0.0.0.0修改为9.0.0.0.0导致系统无法正常启动;
———————————– bbed工具参数 ———————————–
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]
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的帮助文档 ———————————–
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 [ <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 ]
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 [ <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 ]
———————————– bbed的帮助文档 ———————————–
———————————– bbed参数文件 ———————————–
BLOCKSIZE=8192
LISTFILE=bbed.lst
MODE=EDIT
PASSWORD=blockedit
LOGFILE=bbed.log
LISTFILE=bbed.lst
MODE=EDIT
PASSWORD=blockedit
LOGFILE=bbed.log
———————————– bbed参数文件 ———————————–