使用BBED理解和修改Oracle数据块(二)

2015-07-16 12:10:02 · 作者: · 浏览: 52
b1 kubarec? ? ? ? ? ? ? ? ? ? ? ? @58? ? ? 0x11? ? ? ? ? ==>V$TRANSACTION.UBAREC
? ? ? ub2 ktbitflg? ? ? ? ? ? ? ? ? ? ? ? ? @60? ? ? 0xa000 (KTBFUPB, KTBFCOM)
? ? ? union _ktbitun, 2 bytes? ? ? ? ? ? ? @62? ? ?
? ? ? ? sb2 _ktbitfsc? ? ? ? ? ? ? ? ? ? ? @62? ? ? 0
? ? ? ? ub2 _ktbitwrp? ? ? ? ? ? ? ? ? ? ? @62? ? ? 0x0000
? ? ? ub4 ktbitbas? ? ? ? ? ? ? ? ? ? ? ? ? @64? ? ? 0x002fb364
? struct ktbbhitl[1], 24 bytes? ? ? ? ? ? @68? ? ? ? ? ? ? ? ? ? ? ? ? ? ==>事务槽2
? ? ? struct ktbitxid, 8 bytes? ? ? ? ? ? ? @68? ? ?
? ? ? ? ub2 kxidusn? ? ? ? ? ? ? ? ? ? ? ? @68? ? ? 0x0000
? ? ? ? ub2 kxidslt? ? ? ? ? ? ? ? ? ? ? ? @70? ? ? 0x0000
? ? ? ? ub4 kxidsqn? ? ? ? ? ? ? ? ? ? ? ? @72? ? ? 0x00000000
? ? ? struct ktbituba, 8 bytes? ? ? ? ? ? ? @76? ? ?
? ? ? ? ub4 kubadba? ? ? ? ? ? ? ? ? ? ? ? @76? ? ? 0x00000000
? ? ? ? ub2 kubaseq? ? ? ? ? ? ? ? ? ? ? ? @80? ? ? 0x0000
? ? ? ? ub1 kubarec? ? ? ? ? ? ? ? ? ? ? ? @82? ? ? 0x00
? ? ? ub2 ktbitflg? ? ? ? ? ? ? ? ? ? ? ? ? @84? ? ? 0x0000 (NONE)
? ? ? union _ktbitun, 2 bytes? ? ? ? ? ? ? @86? ? ?
? ? ? ? sb2 _ktbitfsc? ? ? ? ? ? ? ? ? ? ? @86? ? ? 0
? ? ? ? ub2 _ktbitwrp? ? ? ? ? ? ? ? ? ? ? @86? ? ? 0x0000
? ? ? ub4 ktbitbas? ? ? ? ? ? ? ? ? ? ? ? ? @88? ? ? 0x00000000


数据层:


BBED> print kdbh
struct kdbh, 14 bytes? ? ? ? ? ? ? ? ? ? ? @100? ?
? ub1 kdbhflag? ? ? ? ? ? ? ? ? ? ? ? ? ? @100? ? ? 0x00 (NONE) ==>标记(N=ptcfree hit(clusters),F=do not put on free list,K=flushable cluster keys)
? sb1 kdbhntab? ? ? ? ? ? ? ? ? ? ? ? ? ? @101? ? ? 1? ==>表个数
? sb2 kdbhnrow? ? ? ? ? ? ? ? ? ? ? ? ? ? @102? ? ? 2? ==>块包含的行数
? sb2 kdbhfrre? ? ? ? ? ? ? ? ? ? ? ? ? ? @104? ? -1? ? ==>是否在空闲列表 -1不在空闲列表
? sb2 kdbhfsbo? ? ? ? ? ? ? ? ? ? ? ? ? ? @106? ? ? 22? ==>空闲空间的开始补偿
? sb2 kdbhfseo? ? ? ? ? ? ? ? ? ? ? ? ? ? @108? ? ? 8066? ==>空闲空间的结束补偿
? sb2 kdbhavsp? ? ? ? ? ? ? ? ? ? ? ? ? ? @110? ? ? 8044? ==>块的平均空间
? sb2 kdbhtosp? ? ? ? ? ? ? ? ? ? ? ? ? ? @112? ? ? 8044? ==>块可以使用的总空间


校验码:


BBED> print tailchk
ub4 tailchk? ? ? ? @8188? ? 0xbaab0601? --尾部校验码
tailchk=(低位2个字节)bas_kcbh(0x002fbaab)+(1位字节)type_kcbh(0x06)+(1位字节)seq_kcbh(0x01)? ==>值在块头记录)


查找:
数据表存储的值:


SQL>column name format a8
SQL>column dump format a40
SQL>select name,dump(name,16)dump from tt1;
NAME? ? DUMP
-------- ----------------------------------------
AAAA? ? Typ=1 Len=4: 41,41,41,41
BBBB? ? Typ=1 Len=4: 42,42,42,42


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


?


?


/c 表示通过字符查找:


BBED> find /c AAAA
?File: /disk2/oradata/sydb/tbs03.dbf (0)
?Block: 135? ? ? ? ? ? ? Offsets: 8184 to 8191? ? Dba:0x00000000
------------------------------------------------------------------------
?41414141 01061aa9


datafile为7,block 135,offset 为8184就是存储AAAA的位置


BBED> dump /v dba 7,135 offset 8184
?File: /disk2/oradata/sydb/tbs03.dbf (7)
?Block: 135? ? Offsets: 8184 to 8191? Dba:0x01c00087
-------------------------------------------------------
?41414141 0106abba? ? ? ? ? ? ? ? ? l AAAA..


/x 表示使用十六进制查找:


BBED> find /x 41414141
?File: /disk2/oradata/sydb/tbs03.dbf (0)
?Block: 135? ? ? ? ? ? ? Offsets: 8184 to 8191? ? ? ? ? Dba:0x00000000
------------------------------------------------------------------------
?41414141 01061aa9


修改值(mode 必须为edit):
MODIFY[/x|d|u|o|c] numeric/character string
通过已知的文件号7,block 135,offset把AAAA的值修改为ABCE


BBED>? modify /c ABCE file 7 block 135 offset 8184
Warning: contents of previous BIFILE will be lost. Proceed? (Y/N) Y
?File: /disk2/oradata/sydb/tbs03.dbf (7)
?Block: 135? ? ? ? ? ? ? Offsets: 8184 to 8191? ? ? ? ? Dba:0x01c00087
------------------------------------------------------------------------
?41424345 0106abba


提交修改:
SUM [ DBA | FILE | FILENAME | BLOCK ] [ APPLY ]


BBED> sum apply
Check value for File 7, Block 135:
current = 0xbe37, required = 0xbe37


验证数据块:
VERIFY [ DBA | FILE | FILENAME | BLOCK ]


BBED> verify
DBVERIFY - Verification starting
FILE = /disk2/oradata/sydb/tbs03.dbf
B