BASE的计算方法为:
对于ASSM:76+(itc-1) * 24= 52 + itc * 24
对于MSSM:68+(itc-1) * 24= 44 + itc * 24


点击(此处)折叠或打开

gyj@ZMDB>select*from v$type_size where componentin('KCB','KTB');


COMPONENTYPEDESCRIPTION TYPE_SIZE

----------------------------------------------------------

KCB KCBH BLOCK COMMON HEADER 20

KTB KTBIT TRANSACTION VARIABLE HEADER 24

KTB KTBBH TRANSACTION FIXED HEADER 48

KTB KTBBH_BS TRANSACTION BLOCK BITMAP SEGMENT 8


1、我们先对ASSM做测试

点击(此处)折叠或打开

gyj@ZMDB>select*from v$version;


BANNER

--------------------------------------------------------------------------------

Oracle Database 11g Enterprise Edition Release 11.2.0.3.0-64bit Production


gyj@ZMDB>create tablespace assm datafile'/u01/app/oracle/oradata/zmdb/assm01.dbf'size50M;


Tablespace created.


gyj@ZMDB>create table gyj_t5(idint,namevarchar2(100))tablespace assm;


Table created.


gyj@ZMDB>insertintogyj_t5 values(1,'AAAAA');


1 row created.


gyj@ZMDB>insertintogyj_t5 values(2,'BBBBB');


1 row created.


gyj@ZMDB>insertintogyj_t5 values(3,'CCCCC');


1 row created.


gyj@ZMDB>COMMIT;


Commit complete.


gyj@ZMDB>alter system flush buffer_cache;


System altered.


gyj@ZMDB>select dbms_rowid.rowid_relative_fno(rowid)file#,dbms_rowid.rowid_block_number(rowid)block#,id,namefrom gyj_t5;


FILE# BLOCK# IDNAME

----------------------------------------

10 135 1 AAAAA

10 135 2 BBBBB

10 135 3 CCCCC



BBED>set file 10 block 135

FILE# 10

BLOCK# 135


BBED>p kdbr[0]

sb2 kdbr[0]@118 8076


BBED>p*kdbr[0]

rowdata[24]

-----------

ub1 rowdata[24]@8176 0x2c


BBED>x /rnc

rowdata[24]@8176

-----------

flag@8176:0x2c(KDRHFL,KDRHFF,KDRHFH)

lock@8177:0x01

cols@8178:2


col 0[2]@8179:1

col 1[5]@8182:AAAAA


BBED>p ktbbhict

sb2 ktbbhict @36 2


8176-8076=76+(itc-1)*24=76+(2-1)*24=100


2、我们对MSSM做测试

点击(此处)折叠或打开

gyj@ZMDB>create tablespace mssm datafile'/u01/app/oracle/oradata/zmdb/mssm01.dbf'size50M segment space management manual;


Tablespace created.



gyj@ZMDB>create table gyj_mssm(idint,namevarchar2(100))tablespace mssm;


Table created.


gyj@ZMDB>insertintogyj_mssm values(4,'DDDDD');


1 row created.


gyj@ZMDB>insertintogyj_mssm values(5,'EEEEE');


1 row created.


gyj@ZMDB>insertintogyj_mssm values(6,'FFFFF');


1 row created.


gyj@ZMDB>commit;


Commit complete.



gyj@ZMDB>colnamefora20

gyj@ZMDB>select dbms_rowid.rowid_relative_fno(rowid)file#,dbms_rowid.rowid_block_number(rowid)block#,id,namefrom gyj_mssm;


FILE# BLOCK# IDNAME

--------------------------------------------------

11 129 4 DDDDD

11 129 5 EEEEE

11 129 6 FFFFF


BBED>set file 11 block 129

FILE# 11

BLOCK# 129


BBED>p kdbr[0]

sb2 kdbr[0]@110 8084


BBED>p*kdbr[0]

rowdata[24]

-----------

ub1 rowdata[24]@8176 0x2c


BBED>x /rnc

rowdata[24]@8176

-----------

flag@8176:0x2c(KDRHFL,KDRHFF,KDRHFH)

lock@8177:0x01

cols@8178:2


col 0[2]@8179:4

col 1[5]@8182:DDDDD


BBED>p ktbbhict

sb2 ktbbhict @36 2


8176-8084=68+(itc-1)*24=68+(2-1)*24=92


3、为什么ASSM要比MSSM多了8个字节

点击(此处)折叠或打开

************MSSM

BBED>setfile11 block 129

FILE#11

BLOCK# 129


BBED>map/v

File:/u01/app/oracle/oradata/zmdb/mssm01.dbf(11)

Block: 129 Dba:0x02c00081

------------------------------------------------------------

KTBDataBlock(Table/Cluster)


struct kcbh,20 bytes @0

ub1 type_kcbh @0

ub1 frmt_kcbh @1

ub1 spare1_kcbh @2

ub1 spare2_kcbh @3

ub4 rdba_kcbh @4

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,72 bytes @20

ub1 ktbbhtyp @20

union ktbbhsid,4 bytes @24

struct ktbbhcsc,8 bytes @28

sb2 ktbbhict @36

ub1 ktbbhflg @38

ub1 ktbbhfsl @39

ub4 ktbbhfnx @40

struct ktbbhitl[2],48 bytes @44


struct kdbh,14 bytes @92

ub1 kdbhflag @92

sb1 kdbhntab @93

sb2 kdbhnrow @94

sb2 kdbhfrre @96

sb2 kdbhfsbo @98

sb2 kdbhfseo @100

sb2 kdbhavsp @102

sb2 kdbhtosp @104


struct kdbt[1],4 bytes @106

sb2 kdbtoffs @106

sb2 kdbtnrow @108


sb2 kdbr[3]@110


ub1 freespace[8036]@116


ub1 rowdata[36]@8152


ub4 tailchk @8188


*****************ASSM

BBED>setfile10 block 135

FILE#10

BLOCK# 135


File:/u01/app/oracle/oradata/zmdb/assm01.dbf(10)

Block: 141 Dba:0x0280008d

------------------------------------------------------------

KTBDataBlock(Table/Cluster)


struct kcbh,20 bytes @0

ub1 type_kcbh @0

ub1 frmt_kcbh @1

ub1 spare1_kcbh @2

ub1 spare2_kcbh @3

ub4 rdba_kcbh @4

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,72 bytes @20

ub1 ktbbhtyp @20

union ktbbhsid,4 bytes @24

struct ktbbhcsc,8 bytes @28

sb2 ktbbhict @36

ub1 ktbbhflg @38

ub1 ktbbhfsl @39

ub4 ktbbhfnx @40

struct ktbbhitl[2],48 bytes @44


struct kdbh,14 bytes @100

ub1 kdbhflag @100

sb1 kdbhntab @101

sb2 kdbhnrow @102

sb2 kdbhfrre @104

sb2 kdbhfsbo @106

sb2 kdbhfseo @108

sb2 kdbhavsp @110

sb2 kdbhtosp @112


struct kdbt[1],4 bytes @114

sb2 kdbtoffs @114

sb2 kdbtnrow @116


sb2 kdbr[3]@118


ub1 freespace[8028]@124


ub1 rowdata[36]@8152


ub4 tailchk @8188


对比
-----MSSM
struct ktbbhitl[2], 48 bytes @44

struct kdbh, 14 bytes @92

---ASSM
struct ktbbhitl[2], 48 bytes @44

struct kdbh, 14 bytes @100

@92---->@100 kdbh偏移量发生了变化,增加了8个byte。