oracle特殊恢复:BBED-DUMP/PRINT命令

来源:这里教程网 时间:2026-03-03 20:10:52 作者:

  dump命令可以 block 的内容显示到屏幕。每次显示的bytes由count控制,默认是512bytes。 使用 /v 选项,可以显示更多详细信息。

 

BBED> dump /v dba 1,116538 offset 0 count 128

 File: /u01/app/oracle/oradata/T1/system01.dbf (1)

 Block: 116538  Offsets:    0 to  127  Dba:0x0041c73a

-------------------------------------------------------

 06a20000 3ac74100 23912c00 00000204 l .¢..: Ɓ .#.,.....

 b79d0000 01000000 b4220100 1f912c00 l ·.......´"....,.

 00800000 03000200 00000000 ffff0000 l ................

 00000000 00000000 00000000 00800080 l ................

 1f912c00 00000000 00000000 00000000 l ..,.............

 00000000 00000000 00000000 00000000 l ................

 00000000 00000000 00000000 00000000 l ................

 00000000 00014100 ffff9400 ed035903 l ......A..... .

 

 <16 bytes per line>

 

看一下blockheader ( 06a20000 3ac74100 23912c00 00000204 ) 中第一行16个bytes 的架构:

Type

Format

Unused

RDBA

SCN Base

SCN Wrap

Seq

Flag

06

a2

0000

3ac74100

23912c00

0000

02

04

print命令输出data structures。在使用print时,可以指定dba,block 等参数来限定输出特定block。

在map章节讲了block结构,可以通过dump来查看block的type ,现在通过print也可以查看

 

BBED> set dba 1,116538

    DBA                0x0041c73a (4310842 1,116538)

 

BBED> set offset 0

    OFFSET             0

 

BBED> print kcbh.type_kcbh

ub1 type_kcbh                               @0        0x06

 

--------可以通过print 输出指定名称的block structures

BBED> print kcbh

struct kcbh, 20 bytes                       @0      

   ub1 type_kcbh                            @0        0x06

   ub1 frmt_kcbh                            @1        0xa2

   ub2 wrp2_kcbh                            @2        0x0000

   ub4 rdba_kcbh                            @4        0x0041c73a

   ub4 bas_kcbh                             @8        0x002c9123

   ub2 wrp_kcbh                             @12       0x0000

   ub1 seq_kcbh                             @14       0x02

   ub1 flg_kcbh                             @15       0x04 (KCBHFCKV)

   ub2 chkval_kcbh                          @16       0x9db7

   ub2 spare3_kcbh                          @18       0x0000

 

------如果我们想确定block 中row的数量,可以print data header structure 或者kdbh

BBED> p kdbh

struct kdbh, 14 bytes                       @116    

   ub1 kdbhflag                             @116      0x00 (NONE)

   sb1 kdbhntab                             @117      1

   sb2 kdbhnrow                             @118      65

   sb2 kdbhfrre                             @120     -1

   sb2 kdbhfsbo                             @122      148

   sb2 kdbhfseo                             @124      1005

   sb2 kdbhavsp                             @126      857

   sb2 kdbhtosp                             @128      857

 

------也可以指定某个具体的structure元素进行print

BBED> p kdbhnrow sb2 kdbhnrow                                @118     65------ block 中保存了 65

 

注意:

当print 一个data structure 时,输出的格式如下:

UnitSize* | Name | Offset | Value

BBED> p kdbr

sb2 kdbr[0]                                 @134      7967

sb2 kdbr[1]                                 @136      7846

sb2 kdbr[2]                                 @138      7741

sb2 kdbr[3]                                 @140      7620

...

sb2 kdbr[63]                                @260      1102

sb2 kdbr[ 64]                                @262      1005

 

格式对应关系:

UnitSize*

Name

Offset

Value

sb2

kdbr[0]

@134

7967

从上面的结果,可以看出,在这个数据块里有 64 行记录 每行的 pointer 需要 2 bytes 来存储。 64 row offset 134 262

 

------ pointer 加前缀 * 可以 print location data structure 。可以使用 kdbr[0] 作为一个指针来 print 它对应的内容。这个 kdbr[0] 是一个本地的 data structure print 需要加 * 号前缀

BBED> p *kdbr[0]

rowdata[6962]

-------------

ub1 rowdata[6962]                           @ 8083      0x2c

 

通过这个信息,可以知道 该行记录的偏移量是8083. dump它的具体信息

BBED> d /v dba 1,116538 offset 8083 count 128

 File: /u01/app/oracle/oradata/T1/system01.dbf (1)

 Block: 116538  Offsets: 8083 to 8191  Dba:0x0041c73a

-------------------------------------------------------

 2c001603 53595311 495f4848 5f4f424a l ,...SYS.I_HH_OBJ

 235f494e 54434f4c 23ff02c1 4702c147 l #_INTCOL#...

 05494e44 45580778 77041101 39100778 l .INDEX.xw...9..x

 77041101 39101332 3031392d 30342d31 l w...9..2019-04-1

 373a3030 3a35363a 31350556 414c4944 l 7:00:56:15.VALID

 014e014e 014e02c1 05ff044e 4f4e45ff l .N.N.N.????..NONE.

 0159014e ff014e01 4e020623 91       l .Y.N..N.N..#.

 

 <16 bytes per line>

 

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

BBED> p offset 8083

rowdata[6962]

-------------

ub1 rowdata[6962]                           @8083     0x2c

 

------这个输出结果默认是16进制的。我们可以将其修改成其他格式

Switch

Display   Format

/x

Hex 十六进制

/d

signed decimal 十进制

/u

unsigned decimal

/o

Octal 八进制

/c

Character

/n

Oracle   Number

/t

Oracle   Date

/i

Oracle   ROWID

 

BBED> p offset 8083

rowdata[6962]

-------------

ub1 rowdata[6962]                           @8083     0x2c

 

BBED> p /d offset 8083

rowdata[6962]

-------------

ub1 rowdata[6962]                           @8083     44

相关推荐

热文推荐