湖北佛 发表于 2013-9-8 22:38:07

BBED printf命令

BBED> set dba 1,33129

      DBA             0x00408169 (4227433 1,33129)

BBED> p kcbh.type_kcbh
ub1 type_kcbh                               @0      0x06

可以通过print 输出指定名称的block structures。
BBED> p kcbh
struct kcbh, 20 bytes                     @0      
   ub1 type_kcbh                            @0      0x06
   ub1 frmt_kcbh                            @1      0xa2
   ub1 spare1_kcbh                        @2      0x00
   ub1 spare2_kcbh                        @3      0x00
   ub4 rdba_kcbh                            @4      0x00408169
   ub4 bas_kcbh                           @8      0x0013670e
   ub2 wrp_kcbh                           @12       0x0000
   ub1 seq_kcbh                           @14       0x06
   ub1 flg_kcbh                           @15       0x06 (KCBHFDLC, KCBHFCKV)
   ub2 chkval_kcbh                        @16       0xd515
   ub2 spare3_kcbh                        @18       0x0000

如果我们想确定block 中row的数量,可以print data header structure 或者kdbh。
BBED> p kdbh
struct kdbh, 14 bytes                     @92      
   ub1 kdbhflag                           @92       0x00 (NONE)
   sb1 kdbhntab                           @93       1
   sb2 kdbhnrow                           @94       2
   sb2 kdbhfrre                           @96      -1
   sb2 kdbhfsbo                           @98       22
   sb2 kdbhfseo                           @100      8084
   sb2 kdbhavsp                           @102      8056
   sb2 kdbhtosp                           @104      8056

也可以指定某个具体的structure元素进行print
BBED> p kdbhnrow
sb2 kdbhnrow                              @94       2

kdbr 里保存的是row directory 的信息。
BBED> p kdbr
sb2 kdbr                                 @110      8090
sb2 kdbr                                 @112      8084

在这个数据块里有2行记录。 每行的pointer 需要2个bytes来存储。 这2行row的offset 从110 到112.
我们可以使用kdbr 作为一个指针来print 它对应的内容。这个kdbr 是一个本地的data structure,我们print 需要加*号前缀。

BBED> p *kdbr
rowdata
----------
ub1 rowdata                              @8182   0x2c

通过这个信息,我们可以知道该行记录的偏移量是8162. 我们就dump 它的具体信息。
BBED> d /v dba 1,33129 offset 8182 count 128
File: /u01/app/oracle/oradata/omrep/system01.dbf (1)
Block: 33129   Offsets: 8182 to 8191Dba:0x00408169
-------------------------------------------------------
2c010102 c1020606 0e67            l ,...á....g

<16 bytes per line>

print命令也可以直接输出一个绝对的offset内容。

BBED> p offset 8182
rowdata
----------
ub1 rowdata                              @8182   0x2c

BBED> p /d offset 8182
rowdata
----------
ub1 rowdata                              @8182   44

页: [1]
查看完整版本: BBED printf命令