首先来看看oracle data block整体结构:
Oracle data block详解(一)
原创
©著作权归作者所有:来自51CTO博客作者ono888的原创作品,请联系作者获取转载授权,否则将追究法律责任
下面我们通过BBED工具来研究数据块的结构,map看到的是一个data block整体结构
BBED> map
File: /data/oracle/oradata/ora10g/system01.dbf (0)
Block: 30 Dba:0x00000000
------------------------------------------------------------
KTB Data Block (Table/Cluster)
struct kcbh, 20 bytes @0 ----------对应cache layer大小是20个字节
struct ktbbh, 72 bytes @20 ----------对应transaction layer一共是72字节
struct kdbh, 14 bytes @92 ------对应data layer
struct kdbt[6], 24 bytes @106 ------对应data layer
sb2 kdbr[133] @130 ------对应data layer
ub1 freespace[245] @396 ------对应data layer
ub1 rowdata[7547] @641 ------对应data layer
ub4 tailchk @8188 ------对应footer 一共4字节
数据块的结构图:
关于struct kcbh(kernel cache block header),kcbh对应的是cache layer。
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 0x0040001e
ub4 bas_kcbh @8 0x0002f9b0
ub2 wrp_kcbh @12 0x0000
ub1 seq_kcbh @14 0x01
ub1 flg_kcbh @15 0x06 (KCBHFDLC, KCBHFCKV)
ub2 chkval_kcbh @16 0x1d7f
ub2 spare3_kcbh @18 0x0000
每个数据块的前20个字节是kcbh结构的部分:
type_kcbh 占用1个字节 表示block类型
frmt_kcbh 占用1个字节 表示block format 9i,8i这个值都是0x02,10g是0xa2
rdba_kcbh 占用4个字节 表示relative database address
bas_kcbh占用4个字节 表示SCN base
wrp_kcbh占用2个字节 表示SCN warp
seq_kcbh占用1个字节 表示同一个transaction里同一个block发生多次修改的序列号
chkval_kcbh占用2个字节 表示optional check value for block
对于一个正常的block scnbase的低两位+block type+scn seq=tailchk,如下面的示例f9b0+06+01=0xf9b00601,若不相等,说明block为一个坏块。
BBED> map
File: /data/oracle/oradata/ora10g/system01.dbf (0)
Block: 30 Dba:0x00000000
------------------------------------------------------------
KTB Data Block (Table/Cluster)
struct kcbh, 20 bytes @0
struct ktbbh, 72 bytes @20
struct kdbh, 14 bytes @92
struct kdbt[6], 24 bytes @106
sb2 kdbr[133] @130
ub1 freespace[245] @396
ub1 rowdata[7547] @641
ub4 tailchk @8188
BBED>
BBED>
BBED> p tailchk
ub4 tailchk @8188 0xf9b00601
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 0x0040001e
ub4 bas_kcbh @8 0x0002f9b0
ub2 wrp_kcbh @12 0x0000
ub1 seq_kcbh @14 0x01
ub1 flg_kcbh @15 0x06 (KCBHFDLC, KCBHFCKV)
ub2 chkval_kcbh @16 0x1d7f
ub2 spare3_kcbh @18 0x0000
参考文档oracle DSI401
![](https://ucenter.51cto.com/images/noavatar_middle.gif)
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
Oracle11g Data Guard--创建物理备库
Oracle 11g Data Guard 管理
oracle hive SQL -
深入详解Oracle data change notification
深入详解
Oracle OTL data change notifica ORA-24912 源码 实现 -
block详解
在网上搜关于block的知识都不是特别详细,在这里对block做一个详细的描述,从入门
什么是block block用法 block block作为参数传递 block带有局部和全局参数