- 最后登录
- 2016-6-27
- 在线时间
- 134 小时
- 威望
- 351
- 金钱
- 2586
- 注册时间
- 2012-3-16
- 阅读权限
- 60
- 帖子
- 188
- 精华
- 6
- 积分
- 351
- UID
- 309
|
1#
发表于 2012-5-10 16:54:23
|
查看: 3030 |
回复: 0
根据我的理解rdba在data block header内是不存在的,只不过是加载到buffer cache时候做了转换而已,但在群里刘大却说rdba在data block header也是存在的,可以看一下这篇文章http://t.askmaclean.com/thread-963-1-1.html里提到的block header的结构:
BBED> map /v
File: /s01/lost1.dbf (0)
Block: 20 Dba:0x00000000
------------------------------------------------------------
KTB Data Block (Table/Cluster)
struct kcbh, 20 bytes @0 --cache block header
ub1 type_kcbh @0
ub1 frmt_kcbh @1
ub1 spare1_kcbh @2
ub1 spare2_kcbh @3
ub4 rdba_kcbh @4 --有rdba信息
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, 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 --data block header,可以看见这里没有rdba信息
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[79] @142
ub1 freespace[824] @300
ub1 rowdata[7064] @1124
ub4 tailchk @8188
从上面可以看出在datafile的block中(对应结构kdbh)是不存储rdba的,不知道刘大怎么看?
第二个问题,当我们发出访问数据块的请求时,比如select * from test,oracle内部是根据rdba还是根据dba来找到实际的数据块地址的呢? |
|