Oracle数据库数据恢复、性能优化

找回密码
注册
搜索
热搜: 活动 交友 discuz
发新帖

351

积分

0

好友

8

主题
1#
发表于 2012-5-10 16:54:23 | 查看: 3031| 回复: 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来找到实际的数据块地址的呢?
您需要登录后才可以回帖 登录 | 注册

QQ|手机版|Archiver|Oracle数据库数据恢复、性能优化

GMT+8, 2024-12-25 14:00 , Processed in 0.045594 second(s), 21 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部
TEL/電話+86 13764045638
Email service@parnassusdata.com
QQ 47079569