【tool】bbed的安装及使用

1、11g下bbed的安装

windows环境下没有提供bbed,以下操作均为linux环境下操作。

11g下编译安装bbed缺少文件,需要从10g中拷贝相关文件

 

其中把sbbdpt.o和ssbbded.o拷贝到$ORACLE_HOME/rdbms/lib/目录下。

 bbedus.msb和bbedus.msg拷贝到$ORACLE_HOME/mesg/目录下。

bbedus.msb拷贝到$ORACLE_HOME/rdbms/mesg目录下。

然后手动编译

cd $ORACLE_HOME/rdbms/lib

make -f ins_rdbms.mk BBED=$ORACLE_HOME/bin/bbed $ORACLE_HOME/bin/bbed

编译成功后即可直接使用bbed进入bbed交互界面,默认密码为blockedit。

 

2、bbed的使用

1、生成listfile文件

可以通过以下sql生成listfile的内容

       select file#||' '||name||' '||bytes from v$datafile;

 

8 /u01/app/oracle/oradata/ISMDB/ts_wjf.dbf 52428800

 

把内容存保存到一个文件里,/home/wjf/listfile.txt。

 

2、生成bbed参数文件

编辑一个文件,如/home/wjf/bbed.par

写入

mode=edit

listfile=/home/wjf/listfile.txt

blocksize=8192

 

3、使用bbed命令进入bbed

bbed  parfile=/home/wjf/bbed.par

会提示输入密码,默认为blockedit。

 

首先可以使用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 [ <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 ]

 

 

以上命令也可以分为几部分去理解

显示信息的

SHOW [ <SET parameter> | ALL ]     ----查看当前环境信息,当前环境是当前设置的文件信息,块信息,block大小等信息。

INFO                                                  ----查看listfile的信息

MAP[/v] [ DBA | FILENAME | FILE | BLOCK ]                    ------打印出块结构,这个MAP经常是设置好块信息之后首先要做的,它就行一张块地图。

PRINT[/x|d|u|o|c] [ DBA | FILE | FILENAME | BLOCK | OFFSET | symbol | *symbol ]       -----打印出各种信息,主要打印块的各结构块信息

DUMP[/v] [ DBA | FILENAME | FILE | BLOCK | OFFSET | COUNT ]                    ------dump出块中存储的十六进制数据

HELP [ <bbed command> | 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 ]

 

进行块修改等操作的

COPY [ DBA | FILE | FILENAME | BLOCK ] TO [ DBA | FILE | FILENAME | BLOCK ]

FIND[/x|d|u|o|c] numeric/character string [ TOP | CURR ]

MODIFY[/x|d|u|o|c] numeric/character string

      [ DBA | FILE | FILENAME | BLOCK | OFFSET | symbol | *symbol ]

VERIFY [ DBA | FILE | FILENAME | BLOCK ]

SUM [ DBA | FILE | FILENAME | BLOCK ] [ APPLY ]

REVERT [ DBA | FILE | FILENAME | BLOCK ]

UNDO

VERIFY [ DBA | FILE | FILENAME | BLOCK ]

 

/x 十六进制 

/d 有符号数的十进制 

/u 无符号的十进制 

/o 八进制 

/c 字符串 

/n Oracle中的Number类型 

/t Oracle中的Data类型 

/i Oracle中的RowID类型 

 

具体说说bbed的输出

进入bbed后,首先需要定位到你要查看和修改的块

 

确认你的当前环境

 

查看块信息


Unit Size中的bn表示n个字节,前缀u和s分别表示unsigned[无符号数]和signed[有符号数,用一位二进制数表示符号位]

 

查看具体每个结构的内容

查看块头

 

查看事务区

 

 

查看数据区头部

 

表目录、行目录其实就是记录了些有关表和行的信息,空闲区和数据区就是具体的数据存储。

查看块尾检查位

 

检查位

      tailchk值为bas_kcbh(0x 1f09 754e) 的最后2bytes即754e

            type_kcbh(0x06)

            seq_kcbh(0x01) 

拼出来的。

 

其他的字段含义可以参考另一个文档,oracle数据块解析。

 

修改块的值

 

1、修改前先备份

copy file 8 block 131 to file 8 block 147

2、确定修改值的偏移量

如果是块结构部分的值,则可以查看偏移量。

如果是数据部分,则可以通过find确定偏移量。

find /c 要查找的字符

/x 十六进制 

       /d 有符号数的十进制 

      /u 无符号的十进制 

      /o 八进制 

      /c 字符串 

就可以定位到要查找字符的偏移量。

3、确认定位的位置

find之后当前offset就会被设置为查找到的字符的offset。

直接使用dump /v可以查看部分能翻译过来的字符。

4、修改字符

把“王”该成“李”

首先查出来李的编码

 

使用modify命令修改

modify /x c0ee dba 8,131 offset 4466

5、重新计算chkval值并应用。

sum apply

在执行这个命令之前,verify一下,这个块已被标记为坏块,使用sum计算一下,显示了chkval的现值和正确值。

 

这样就OK了。

 

如果要回退

undo 

回退上一次modify或者assign操作

 

revert 

回滚一个文件和一个block至bbed启动时的状态 

不带参数将回滚bbed会话中的所有更改 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值