Chinaunix首页 | 论坛 | 博客
  • 博客访问: 629333
  • 博文数量: 110
  • 博客积分: 2352
  • 博客等级: 大尉
  • 技术积分: 1253
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-29 14:00
文章分类
文章存档

2018年(1)

2013年(20)

2012年(89)

分类: Oracle

2012-07-12 11:57:17

BBED是Oracle提供的块编辑器,借助BBED,可以帮助我们更好的理解Oracle的Block的结构。当然,反过来说,也只有更加理解块的结构,才能更好的利用BBED完成某些特殊情况下的灾难恢复。 
以下是BBED各个命令的使用,翻译自BBED手册。

set dba: 
设置当前编辑/浏览的数据块地址,dba的格式:file_id,block_id,如选择4号数据文件的16号数据块:set dba 4,16

set filename 
设置当前编辑/浏览的文件 
set filename '/u01/app/oracle/oradata/orcl/example01.dbf'

set file 
设置当前编辑/浏览的文件号 
BBED> set file 4 
FILE# 4

set block 
设置当前编辑/浏览的块号 
BBED> set block 16 
BLOCK# 16 
前面加(+)/(-)号表示对当前块号做加减运算 
BBED> set block +3 
BLOCK# 19 
BBED> set block -3 
BLOCK# 16

set offset 
设置dump显示数据的起始字节偏移量 
BBED> set offset 20 
OFFSET 20 

BBED> set offset +2 
OFFSET 22 

BBED> set offset -3 
OFFSET 19 

BBED> d 
File: /u01/app/oracle/oradata/orcl/users01.dbf (4) 
Block: 16 Offsets: 19 to 530 Dba:0x01000010 
------------------------------------------------------------------------ 
00010000 00cac700 00d9bf06 00000000 00020032 00090000 01030011 00f20000 
00945780 00c8002d 00042000 00dbbf06 00000000 00000000 00000000 00000000 
00000000 00000000 00000000 00000000 00000104 00ffff1a 003c1f22 1f221f00 
0004007e 1f681f54 1f3c1f00 00000000 00000000 00000000 00000000 00000000 
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 

<32 bytes per line> 

set blocksize 
设置当前数据文件的块大小,必须是当前数据文件的块大小,否则报错 
BBED> set blocksize 16384 
BBED-00307: incorrect blocksize (8192) or truncated file 
BBED> set blocksize 8192 
BLOCKSIZE 8192

set listfile 
设置使用的listfile文件,listfile文件包含bbed所要编辑的数据文件列表 
BBED> show 
FILE# 1 
BLOCK# 1 
OFFSET 0 
DBA 0x00400001 (4194305 1,1) 
FILENAME /u01/app/oracle/oradata/orcl/system01.dbf 
BIFILE bifile.bbd 
LISTFILE filelist.txt 
BLOCKSIZE 8192 
MODE Edit 
EDIT Unrecoverable 
IBASE Dec 
OBASE Dec 
WIDTH 80 
COUNT 512 
LOGFILE log.bbd 
SPOOL No 

BBED> set listfile 'filelist.txt.bak' 
LISTFILE filelist.txt.bak 

listfile文件每行的格式为:file_id file_name file_bytes,如下 
1 /u01/app/oracle/oradata/orcl/system01.dbf 503316480 
2 /u01/app/oracle/oradata/orcl/undotbs01.dbf 31457280 
3 /u01/app/oracle/oradata/orcl/sysaux01.dbf 241172480 
4 /u01/app/oracle/oradata/orcl/users01.dbf 5242880 
5 /u01/app/oracle/oradata/orcl/example01.dbf 104857600 
可以使用SQL语句生成 
select file#||' '||name||' '||bytes from v$datafile;

set count 
设置dump命令显示的对应数据块的字节数,默认为512个字节。如果需要看到一个8k数据块的整个块内容,可以设置count为8192或者更大 
BBED> set count 8192 
COUNT 8192 

BBED> d 
File: /u01/app/oracle/oradata/orcl/users01.dbf (4) 
Block: 15 Offsets: 0 to 8191 Dba:0x0100000f 
------------------------------------------------------------------------ 
06a20000 0f000001 dbbf0600 00000104 4b380000 01000000 cac70000 d9bf0600 
00000000 02003200 09000001 00000000 00000000 00000000 00000000 00000000 
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
00000000 00000000 ffff0e00 981f8a1f 8a1f0000 00000000 00000000 00000000 
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
---------------------此处省略n行--------------------------------------- 
00000000 00000000 00000000 00000000 00000000 00000000 00000000 0106dbbf 

<32 bytes per line>

set ibase 
设置使用set block,set file,set offset使用的进制:Dec-十进制 Hex-十六进制 Oct-八进制 
BBED> show ibase 
IBASE Dec 

BBED> set ibase hex 
IBASE Hex 

BBED> set block a 
BLOCK# 10 

BBED> set ibase oct 
IBASE Oct 

BBED> set block 9 
BBED-00202: invalid parameter (9) 


BBED> set block 8 
BBED-00202: invalid parameter (8) 


BBED> set block 7 
BLOCK# 7 

set mode 
设置bbed模式是编辑还是浏览,浏览模式无法对数据块进行修改 
BBED> set mode browse 
MODE Browse 

BBED> set mode edit 
MODE Edit

show 
显示当前bbed的配置[通过set命令设置的选项] 
BBED> show 
FILE# 04 
BLOCK# 07 
OFFSET 00 
DBA 0x01000007 (16777223 4,7) 
FILENAME /u01/app/oracle/oradata/orcl/users01.dbf 
BIFILE bifile.bbd 
LISTFILE filelist.txt 
BLOCKSIZE 8192 
MODE Edit 
EDIT Unrecoverable 
IBASE Oct 
OBASE Oct 
WIDTH 80 
COUNT 8192 
LOGFILE log.bbd 
SPOOL No 

info 
显示当前的listfile内容 
BBED> info 
File# Name Size(blks) 
----- ---- ---------- 
1 /u01/app/oracle/oradata/orcl/system01.dbf 61440 
2 /u01/app/oracle/oradata/orcl/undotbs01.dbf 3840 
3 /u01/app/oracle/oradata/orcl/sysaux01.dbf 29440 
4 /u01/app/oracle/oradata/orcl/users01.dbf 640 
5 /u01/app/oracle/oradata/orcl/example01.dbf 12800 

map 
显示块结构 
显示当前块 
BBED> map 
File: /u01/app/oracle/oradata/orcl/users01.dbf (4) 
Block: 12 Dba:0x0100000c 
------------------------------------------------------------ 
KTB Data Block (Table/Cluster) 

struct kcbh, 20 bytes @0 

struct ktbbh, 72 bytes @20 

struct kdbh, 14 bytes @100 

struct kdbt[0], 0 bytes @114 

sb2 kdbr[0] @114 

ub1 freespace[8074] @114 

ub1 rowdata[0] @8188 

ub4 tailchk @8188 
显示当前块结构并显示结构体的每个字段 
BBED> map /v 
File: /u01/app/oracle/oradata/orcl/users01.dbf (4) 
Block: 12 Dba:0x0100000c 
------------------------------------------------------------ 
KTB Data Block (Table/Cluster) 

struct kcbh, 20 bytes @0 
ub1 type_kcbh @0 
ub1 frmt_kcbh @1 
ub1 spare1_kcbh @2 
ub1 spare2_kcbh @3 
ub4 rdba_kcbh @4 
ub4 bas_kcbh @8 
ub2 wrp_kcbh @12 
ub1 seq_kcbh @14 
ub1 flg_kcbh @15 
ub2 chkval_kcbh @16 
ub2 spare3_kcbh @18 

struct ktbbh, 72 bytes @20 
ub1 ktbbhtyp @20 
union ktbbhsid, 4 bytes @24 
struct ktbbhcsc, 8 bytes @28 
b2 ktbbhict @36 
ub1 ktbbhflg @38 
ub1 ktbbhfsl @39 
ub4 ktbbhfnx @40 
struct ktbbhitl[2], 48 bytes @44 

struct kdbh, 14 bytes @100 
ub1 kdbhflag @100 
b1 kdbhntab @101 
b2 kdbhnrow @102 
sb2 kdbhfrre @104 
sb2 kdbhfsbo @106 
sb2 kdbhfseo @108 
b2 kdbhavsp @110 
b2 kdbhtosp @112 

struct kdbt[0], 0 bytes @114 
b2 kdbtoffs @114 
b2 kdbtnrow @116 

sb2 kdbr[0] @114 

ub1 freespace[8074] @114 

ub1 rowdata[0] @8188 

ub4 tailchk @8188 
显示指定数据块的结构 
BBED> map /v dba 4,16 
File: /u01/app/oracle/oradata/orcl/users01.dbf (4) 
Block: 14 Dba:0x0100000e 
------------------------------------------------------------ 
KTB Data Block (Table/Cluster) 

struct kcbh, 20 bytes @0 
ub1 type_kcbh @0 
ub1 frmt_kcbh @1 
ub1 spare1_kcbh @2 
ub1 spare2_kcbh @3 
ub4 rdba_kcbh @4 
ub4 bas_kcbh @8 
ub2 wrp_kcbh @12 
ub1 seq_kcbh @14 
ub1 flg_kcbh @15 
ub2 chkval_kcbh @16 
ub2 spare3_kcbh @18 

struct ktbbh, 72 bytes @20 
ub1 ktbbhtyp @20 
union ktbbhsid, 4 bytes @24 
struct ktbbhcsc, 8 bytes @28 
b2 ktbbhict @36 
ub1 ktbbhflg @38 
ub1 ktbbhfsl @39 
ub4 ktbbhfnx @40 
struct ktbbhitl[2], 48 bytes @44 

struct kdbh, 14 bytes @100 
ub1 kdbhflag @100 
b1 kdbhntab @101 
b2 kdbhnrow @102 
sb2 kdbhfrre @104 
sb2 kdbhfsbo @106 
sb2 kdbhfseo @108 
b2 kdbhavsp @110 
b2 kdbhtosp @112 

struct kdbt[0], 0 bytes @114 
b2 kdbtoffs @114 
b2 kdbtnrow @116 

sb2 kdbr[0] @114 

ub1 freespace[8074] @114 

ub1 rowdata[0] @8188 

ub4 tailchk @8188

dump 
显示数据块内容[十六进制] 
BBED> d 
File: /u01/app/oracle/oradata/orcl/users01.dbf (4) 
Block: 14 Offsets: 0 to 255 Dba:0x0100000e 
------------------------------------------------------------------------ 
06a20000 0e000001 dbbf0600 00000104 a8380000 01000a00 cac70000 d9bf0600 
0000e81f 021f3200 09000001 00000000 00000000 00000000 00000000 00000000 
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
00000000 00000000 ffff0e00 981f8a1f 8a1f0000 00000000 00000000 00000000 
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 

<32 bytes per line> 
同时显示二进制转换后的字符串 
BBED> set offset 8096 
OFFSET 8096 

BBED> d /v 
File: /u01/app/oracle/oradata/orcl/users01.dbf (4) 
Block: 16 Offsets: 8096 to 8191 Dba:0x01000010 
------------------------------------------------------- 
2c010302 c1290a4f 50455241 54494f4e l ,...?.OPERATION 
5306424f 53544f4e 2c010302 c11f0553 l S.BOSTON,...?.S 
414c4553 07434849 4341474f 2c010302 l ALES.CHICAGO,... 
c1150852 45534541 52434806 44414c4c l ?.RESEARCH.DALL 
41532c01 0302c10b 0a414343 4f554e54 l AS,...?.ACCOUNT 
494e4708 4e455720 594f524b 0606dbbf l ING.NEW YORK..劭 

<16 bytes per line> 
也可以在dump命令中指定dba,offset和count 
BBED> d /v dba 4,16 offset 8097 count 100 
File: /u01/app/oracle/oradata/orcl/users01.dbf (4) 
Block: 16 Offsets: 8097 to 8191 Dba:0x01000010 
------------------------------------------------------- 
010302c1 290a4f50 45524154 494f4e53 l ...?.OPERATIONS 
06424f53 544f4e2c 010302c1 1f055341 l .BOSTON,...?.SA 
4c455307 43484943 41474f2c 010302c1 l LES.CHICAGO,... 
15085245 53454152 43480644 414c4c41 l ..RESEARCH.DALLA 
532c0103 02c10b0a 4143434f 554e5449 l S,...?.ACCOUNTI 
4e47084e 45572059 4f524b06 06dbbf l NG.NEW YORK..劭 

<16 bytes per line> 

print 
显示数据块中offset位置的块结构 
BBED> set dba 4,16 
DBA 0x01000010 (16777232 4,16) 

BBED> set offset 0 
OFFSET 0 

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

BBED> set offset 8190 
OFFSET 8190 

BBED> p 
tailchk 
------- 
ub4 tailchk @8188 0xbfdb0606 

BBED> p dba 4,16 offset 8190 
tailchk 
------- 
ub4 tailchk @8188 0xbfdb0606 
显示结构体的每个字段 
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 0x01000010 
ub4 bas_kcbh @8 0x0006bfdb 
ub2 wrp_kcbh @12 0x0000 
ub1 seq_kcbh @14 0x06 
ub1 flg_kcbh @15 0x06 (KCBHFDLC, KCBHFCKV) 
ub2 chkval_kcbh @16 0xf309 
ub2 spare3_kcbh @18 0x0000 
如想查看块中存储的数据行数,打印kdbh(Data Block Header)结构,Block Header结构体中包含有记录块中存储数据行数的字段kdbhnrow 
BBED> p kdbh 
struct kdbh, 14 bytes @100 
ub1 kdbhflag @100 0x00 (NONE) 
b1 kdbhntab @101 1 
b2 kdbhnrow @102 4 --数据行数 
sb2 kdbhfrre @104 -1 
sb2 kdbhfsbo @106 26 
sb2 kdbhfseo @108 7996 
b2 kdbhavsp @110 7970 
b2 kdbhtosp @112 7970 
也可以直接打印kdbhnrow字段 
BBED> p kdbhnrow 
b2 kdbhnrow @102 4 
print命令打印数据结构的格式如下 
Unit Size | Name | Offset | Value 
Unit Size中的bn表示n个字节,前缀u和s分别表示unsigned[无符号数]和signed[有符号数,用一位二进制数表示符号位] 
使用指针符*查看指针类型的数据[如kdbr结构体也就是Row Directory中的指针,Row Directory中的每个记录指向Row Data部分的实际存储数据的地址],以存储scott.dept这张表的block为例,也就是dba为4,16的这个block: 
Row Directory: 
BBED> p kdbr 
sb2 kdbr[0] @118 8062 
sb2 kdbr[1] @120 8040 
sb2 kdbr[2] @122 8020 
sb2 kdbr[3] @124 7996 

Row Directory中第一个记录指向Row Data部分的地址 
BBED> p *kdbr[0] 
rowdata[66] 
----------- 
ub1 rowdata[66] @8162 0x2c 

可以使用dump命令进行验证 
BBED> d /v offset 8162 
File: /u01/app/oracle/oradata/orcl/users01.dbf (4) 
Block: 16 Offsets: 8162 to 8191 Dba:0x01000010 
------------------------------------------------------- 
2c010302 c10b0a41 43434f55 4e54494e l ,...?.ACCOUNTIN 
47084e45 5720594f 524b0606 dbbf l G.NEW YORK..劭 

<16 bytes per line> 
print也可以直接使用offset指定偏移量,但没有类似dump命令的count选项 
BBED> p dba 4,14 offset 100 
kdbh.kdbhflag 
------------- 
ub1 kdbhflag @100 0x00 (NONE) 
print命令还有一些输出格式控制选项,如下 
/x 十六进制 
/d 有符号数的十进制 
/u 无符号的十进制 
/o 八进制 
/c 字符串 
/n Oracle中的Number类型 
/t Oracle中的Data类型 
/i Oracle中的RowID类型 
BBED> p /c rowdata 
ub1 rowdata[0] @8096 , 
ub1 rowdata[1] @8097 . 
ub1 rowdata[2] @8098 . 
ub1 rowdata[3] @8099 . 
ub1 rowdata[4] @8100 
ub1 rowdata[5] @8101 ) 
ub1 rowdata[6] @8102 . 
ub1 rowdata[7] @8103 O 
ub1 rowdata[8] @8104 P 
ub1 rowdata[9] @8105 E 
ub1 rowdata[10] @8106 R 
ub1 rowdata[11] @8107 A 
ub1 rowdata[12] @8108 T 
ub1 rowdata[13] @8109 I 
ub1 rowdata[14] @8110 O 
ub1 rowdata[15] @8111 N 
ub1 rowdata[16] @8112 S 
ub1 rowdata[17] @8113 . 
ub1 rowdata[18] @8114 B 
ub1 rowdata[19] @8115 O 
ub1 rowdata[20] @8116 S 
ub1 rowdata[21] @8117 T 
ub1 rowdata[22] @8118 O 
ub1 rowdata[23] @8119 N 
ub1 rowdata[24] @8120 , 
ub1 rowdata[25] @8121 . 
ub1 rowdata[26] @8122 . 
-------------------------此处也省略n行----------------

examine 
examine用于以16进制或者特定的格式显示行数据 
BBED> x /rncc 
rowdata[0] @8096 
---------- 
flag@8096: 0x2c (KDRHFL, KDRHFF, KDRHFH) 
lock@8097: 0x01 
cols@8098: 3 

col 0[2] @8099: 40 
col 1[10] @8102: OPERATIONS 
col 2[6] @8113: BOSTON 
用于控制显示格式的开关 
/b b1,ub1(byte) 
/h b2,ub2(half-word) 
/w b4,ub4(word) 
/l b8,ub8(long)(was b4/ub4 in Oracle7) 
/r Oracle table/index row 
ncc指定了3列值的类型分别为Number、Char和Char 
指定重复次数,如显示block中全部的4行记录 
BBED> x /4rncc 
rowdata[0] @8096 
---------- 
flag@8096: 0x2c (KDRHFL, KDRHFF, KDRHFH) 
lock@8097: 0x01 
cols@8098: 3 

col 0[2] @8099: 40 
col 1[10] @8102: OPERATIONS 
col 2[6] @8113: BOSTON 

rowdata[24] @8120 
----------- 
flag@8120: 0x2c (KDRHFL, KDRHFF, KDRHFH) 
lock@8121: 0x01 
cols@8122: 3 

col 0[2] @8123: 30 
col 1[5] @8126: SALES 
col 2[7] @8132: CHICAGO 

rowdata[44] @8140 
----------- 
flag@8140: 0x2c (KDRHFL, KDRHFF, KDRHFH) 
lock@8141: 0x01 
cols@8142: 3 

col 0[2] @8143: 20 
col 1[8] @8146: RESEARCH 
col 2[6] @8155: DALLAS 

rowdata[66] @8162 
----------- 
flag@8162: 0x2c (KDRHFL, KDRHFF, KDRHFH) 
lock@8163: 0x01 
cols@8164: 3 

col 0[2] @8165: 10 
col 1[10] @8168: ACCOUNTING 
col 2[8] @8179: NEW YORK

find 
在block中查找指定格式的数据 
查找的数据格式可以由以下格式指定 
/x 十六进制 
/d 十进制 
/u 无符号十进制 
/o 八进制 
/c 字符 
可以通过TOP和CURR指定搜索的起始offset 
BBED> set offset 8165 
OFFSET 8165 
从当前的offset开始搜索 
BBED> f /c DALLAS CURR 
BBED-00212: search string not found 
从offset为0处开始搜索 
BBED> f /c DALLAS TOP 
File: /u01/app/oracle/oradata/orcl/users01.dbf (4) 
Block: 16 Offsets: 8156 to 8191 Dba:0x01000010 
------------------------------------------------------------------------ 
44414c4c 41532c01 0302c10b 0a414343 4f554e54 494e4708 4e455720 594f524b 
0606dbbf 

<32 bytes per line> 
此时的offset被设置为匹配搜索的第一个位置 
BBED> show offset 
OFFSET 8156 
使用dump命令进行验证 
BBED> d /v 
File: /u01/app/oracle/oradata/orcl/users01.dbf (4) 
Block: 16 Offsets: 8156 to 8191 Dba:0x01000010 
------------------------------------------------------- 
44414c4c 41532c01 0302c10b 0a414343 l DALLAS,...?.ACC 
4f554e54 494e4708 4e455720 594f524b l OUNTING.NEW YORK 
0606dbbf l ..劭 

<16 bytes per line> 
可以使用不带任何参数的find命令继续查找匹配的其他位置

copy 
拷贝一个数据块至另一个数据块 
BBED> copy dba 2,16 to dba 1,16

modify 
以指定的数据格式修改数据块内容 
modify命令指定的数据格式同find命令 
/x 十六进制 
/d 十进制 
/u 无符号十进制 
/o 八进制 
/c 字符 
修改block的NEW YORK为ZHEJIANG 
BBED> f /c NEW TOP 
File: /u01/app/oracle/oradata/orcl/users01.dbf (4) 
Block: 16 Offsets: 8180 to 8191 Dba:0x01000010 
------------------------------------------------------------------------ 
4e455720 594f524b 0606dbbf 

<32 bytes per line> 

BBED> d /v 
File: /u01/app/oracle/oradata/orcl/users01.dbf (4) 
Block: 16 Offsets: 8180 to 8191 Dba:0x01000010 
------------------------------------------------------- 
4e455720 594f524b 0606dbbf l NEW YORK..劭 

<16 bytes per line> 

BBED> m /c ZHEJIANG dba 4,16 offset 8180 
File: /u01/app/oracle/oradata/orcl/users01.dbf (4) 
Block: 16 Offsets: 8180 to 8191 Dba:0x01000010 
------------------------------------------------------------------------ 
5a48454a 49414e47 0606dbbf 

<32 bytes per line> 

BBED> d /v 
File: /u01/app/oracle/oradata/orcl/users01.dbf (4) 
Block: 16 Offsets: 8180 to 8191 Dba:0x01000010 
------------------------------------------------------- 
5a48454a 49414e47 0606dbbf l ZHEJIANG..劭 

<16 bytes per line>

sum 
显示或更新checksum校验值 
BBED> sum dba 4,16 
Check value for File 4, Block 16: 
current = 0xf309, required = 0x9603 

BBED> sum dba 4,16 apply 
Check value for File 4, Block 16: 
current = 0x9603, required = 0x9603

push/pop 
使用一个堆栈用于保存dba和offset,类似一个历史标签 
BBED> push 
DBA 0x01000010 (16777232 4,16) 
OFFSET 8180 

BBED> set dba 1,14 
DBA 0x0040000e (4194318 1,14) 

BBED> pop 
DBA 0x01000010 (16777232 4,16) 
OFFSET 8180

revert 
回滚一个文件和一个block至bbed启动时的状态 
不带参数将回滚bbed会话中的所有更改 
BBED> revert 
All changes made in this session will be rolled back. Proceed? (Y/N) n 
Revert cancelled. 

BBED> revert file 
All changes made to this file will be rolled back. Proceed? (Y/N) n 
Revert cancelled. 

BBED> revert block 
All changes made to this block will be rolled back. Proceed? (Y/N) n 
Revert cancelled.

undo 
回退上一次modify或者assign操作

verify 
调用dbverify的一个函数校验block的完整性 
BBED> verify 
DBVERIFY - Verification starting 
FILE = /u01/app/oracle/oradata/orcl/users01.dbf 
BLOCK = 16 


DBVERIFY - Verification complete 

Total Blocks Examined : 1 
Total Blocks Processed (Data) : 1 
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

corrupt 
标记数据块为坏块 
BBED> corrupt 
Block marked media corrupt. 

BBED> verify 
DBVERIFY - Verification starting 
FILE = /u01/app/oracle/oradata/orcl/users01.dbf 
BLOCK = 16 

Block Checking: DBA = 16777232, Block Type = KTB-managed data block 
Found block already marked corrupted 

DBVERIFY - Verification complete 

Total Blocks Examined : 1 
Total Blocks Processed (Data) : 1 
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

[使用] 
修改数据块内容的内容的一般流程: 
先找一张表中的一个rowid,如scott的dept表 
SQL> run 
1* select rowid,d.* from scott.dept d 

ROWID DEPTNO DNAME LOC 
------------------ ---------- -------------- ------------- 
AAAMfKAAEAAAAAQAAA 10 ACCOUNTING NEW YORK 
AAAMfKAAEAAAAAQAAB 20 RESEARCH DALLAS 
AAAMfKAAEAAAAAQAAC 30 SALES CHICAGO 
AAAMfKAAEAAAAAQAAD 40 OPERATIONS BOSTON

通过rowid得到文件号和块号 
SQL> select DBMS_ROWID.ROWID_RELATIVE_FNO('AAAMfKAAEAAAAAQAAA') file_id from dual; 

FILE_ID 
---------- 

SQL> select DBMS_ROWID.ROWID_BLOCK_NUMBER('AAAMfKAAEAAAAAQAAA') block_id from dual; 

BLOCK_ID 
---------- 
16

选择dept表上的16号block 
BBED> set dba 4,16 
DBA 0x01000010 (16777232 4,16)

使用map查看block结构 
BBED> map 
File: /u01/app/oracle/oradata/orcl/users01.dbf (4) 
Block: 16 Dba:0x01000010 
------------------------------------------------------------ 
KTB Data Block (Table/Cluster) 

struct kcbh, 20 bytes @0 

struct ktbbh, 72 bytes @20 

struct kdbh, 14 bytes @100 

struct kdbt[1], 4 bytes @114 

sb2 kdbr[4] @118 

ub1 freespace[7970] @126 

ub1 rowdata[92] @8096 

ub4 tailchk @8188

设置偏移量 
BBED> set offset 8096 
OFFSET 8096

查看block内容 
BBED> d /v 
File: /u01/app/oracle/oradata/orcl/users01.dbf (4) 
Block: 16 Offsets: 8096 to 8191 Dba:0x01000010 
------------------------------------------------------- 
2c010302 c1290a4f 50455241 54494f4e l ,...?.OPERATION 
5306424f 53544f4e 2c010302 c11f0553 l S.BOSTON,...?.S 
414c4553 07434849 4341474f 2c010302 l ALES.CHICAGO,... 
c1150852 45534541 52434806 44414c4c l ?.RESEARCH.DALL 
41532c01 0302c10b 0a414343 4f554e54 l AS,...?.ACCOUNT 
494e4708 4e455720 594f524b 0606dbbf l ING.NEW YORK..劭 

<16 bytes per line>

查找NEW YORK,并将其修改为ZHEJIANG 
BBED> f /c NEW TOP 
File: /u01/app/oracle/oradata/orcl/users01.dbf (4) 
Block: 16 Offsets: 8180 to 8191 Dba:0x01000010 
------------------------------------------------------------------------ 
4e455720 594f524b 0606dbbf 

<32 bytes per line> 

BBED> d /v 
File: /u01/app/oracle/oradata/orcl/users01.dbf (4) 
Block: 16 Offsets: 8180 to 8191 Dba:0x01000010 
------------------------------------------------------- 
4e455720 594f524b 0606dbbf l NEW YORK..劭 

<16 bytes per line> 

BBED> m /c ZHEJIANG dba 4,16 offset 8180 
File: /u01/app/oracle/oradata/orcl/users01.dbf (4) 
Block: 16 Offsets: 8180 to 8191 Dba:0x01000010 
------------------------------------------------------------------------ 
5a48454a 49414e47 0606dbbf 

<32 bytes per line> 

BBED> d /v 
File: /u01/app/oracle/oradata/orcl/users01.dbf (4) 
Block: 16 Offsets: 8180 to 8191 Dba:0x01000010 
------------------------------------------------------- 
5a48454a 49414e47 0606dbbf l ZHEJIANG..劭 

<16 bytes per line> 

在修改数据块之后,重新计算并更新checksum 
BBED> sum dba 4,16 
Check value for File 4, Block 16: 
current = 0xf309, required = 0x9603 

BBED> sum dba 4,16 apply 
Check value for File 4, Block 16: 
current = 0x9603, required = 0x9603

此时数据块已被修改,查询业务表验证 
SQL> run 
1* ALTER SYSTEM FLUSH BUFFER_CACHE 

System altered. 

SQL> select rowid,d.* from scott.dept d; 

ROWID DEPTNO DNAME LOC 
------------------ ---------- -------------- ------------- 
AAAMfKAAEAAAAAQAAA 10 ACCOUNTING ZHEJIANG 
AAAMfKAAEAAAAAQAAB 20 RESEARCH DALLAS 
AAAMfKAAEAAAAAQAAC 30 SALES CHICAGO 
AAAMfKAAEAAAAAQAAD 40 OPERATIONS BOSTON

阅读(2501) | 评论(0) | 转发(0) |
0

上一篇:BBED的使用实例

下一篇:Oracle常用基本知识

给主人留下些什么吧!~~