bbh, 96 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[3], 72 bytes @44
struct kdbh, 14 bytes @124
ub1 kdbhflag @124
b1 kdbhntab @125
b2 kdbhnrow @126
sb2 kdbhfrre @128
sb2 kdbhfsbo @130
sb2 kdbhfseo @132
b2 kdbhavsp @134
b2 kdbhtosp @136
struct kdbt[1], 4 bytes @138
b2 kdbtoffs @138
b2 kdbtnrow @140
sb2 kdbr[96] @142
ub1 freespace[868] @334
ub1 rowdata[6986] @1202
ub4 tailchk @8188
BBED> p *kdbr[1]
rowdata[6844]
-------------
ub1 rowdata[6844] @8046 0x2c
BBED> set offset 8046
OFFSET 8046
BBED> x /rccnncttccccc
rowdata[6844] @8046
-------------
flag@8046: 0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@8047: 0x00
cols@8048: 12
col 0[7] @8049: I_USER1
col 1[0] @8057: *NULL*
col 2[2] @8058: 44
col 3[2] @8061: 44
col 4[5] @8064: INDEX
col 5[7] @8070: 2010-04-20 08:24:28
col 6[7] @8078: 2010-04-20 08:24:28
col 7[19] @8086: 2010-04-20:08:24:28
col 8[5] @8106: VALID
col 9[1] @8112: N
col 10[1] @8114: N
col 11[1] @8116: N
BBED> set offset 8046
OFFSET 8046
BBED> modify /x ff
File: /home/app/oraten/oradata/oraten/tbs101.dbf (5)
Block: 20 Offsets: 8046 to 8191 Dba:0x01400014
------------------------------------------------------------------------
ff000c07 495f5553 455231ff 02c12d02 c12d0549 4e444558 07786e04 1409191d
07786e04 1409191d 13323031 302d3034 2d32303a 30383a32 343a3238 0556414c
4944014e 014e014e 2c000c05 49434f4c 24ff02c1 1502c103 05544142 4c450778
6e041409 191d0778 6e041409 211a1332 3031302d 30342d32 303a3038 3a32343a
32380556 414c4944 014e014e 014e0106 5af8
<32 bytes per line>
BBED> x /rccnncttccccc
rowdata[6844] @8046
-------------
flag@8046: 0xff (KDRHFN, KDRHFP, KDRHFL, KDRHFF, KDRHFD, KDRHFH, KDRHFC, KDRHFK)
lock@8047: 0x00
cols@8048: 0
ckix@8049: 7
BBED> sum apply
Check value for File 5, Block 20:
current = 0xb533, required = 0xb533
此时我们通过sqlpus查询并编辑t1
SQL> alter system flush buffer_cache;
System altered.
SQL> select count(*) from t1;
COUNT(*)
----------
22944
SQL> select sum(length(object_name)) from t1;
SUM(LENGTH(OBJECT_NAME))
------------------------
531915
SQL> update t1 set object_name = rownum;
update t1 set object_name = rownum
*
ERROR at line 1:
ORA-00607: Internal error occurred while making a change to a data block
ORA-00600: internal error code, arguments: [kddummy_blkchk], [5], [20], [6251],
[], [], [], []
SQL> rollback;
Rollback complete.
SQL> update t1 set object_name = rownum;
update t1 set object_name = rownum
*
ERROR at line 1:
ORA-01578: ORACLE data block corrupted (file # 5, block # 20)
ORA-01110: data file 5: '/home/app/oraten/oradata/oraten/tbs101.dbf'
可见此时oracle认为发生了逻辑错误,查看block20的标志位发现, 逻辑损坏的标记(14字节修改位ff,tailchk中包含ff)已经打上。
BBED> set file 5
FILE# 5
BBED> set block 20
BLOCK# 20
BBED> set offset 14
OFFSET 14
BBED> dump /v count 12
File: /home/app/oraten/oradata/oraten/tbs101.dbf (5)
Block: 20 Offsets: 14 to 25 Dba:0x01400014
-------------------------------------------------------
ff0438b5 00000100 00001ecb l ..8.........
<16 bytes per line>
BBED> set offset 8188
OFFSET 8188
BBED> dump /v
File: /home/app/oraten/oradata/oraten/tbs101.dbf (5)
Block: 20 Offsets: 8