数据块内部偏移量的基本计算方法
admin
2023-05-14 15:02:05
0

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


点击(此处)折叠或打开

  1. gyj@ZMDB> select * from v$type_size where component in ('KCB','KTB');


  2. COMPONEN TYPE DESCRIPTION TYPE_SIZE

  3. -------- -------- -------------------------------- ----------

  4. KCB KCBH BLOCK COMMON HEADER 20

  5. KTB KTBIT TRANSACTION VARIABLE HEADER 24

  6. KTB KTBBH TRANSACTION FIXED HEADER 48

  7. KTB KTBBH_BS TRANSACTION BLOCK BITMAP SEGMENT 8


1、我们先对ASSM做测试

点击(此处)折叠或打开

  1. gyj@ZMDB> select * from v$version;


  2. BANNER

  3. --------------------------------------------------------------------------------

  4. Oracle Database 11g Enterprise Edition Release 11.2.0.3.- 64bit Production


  5. gyj@ZMDB> create tablespace assm datafile '/u01/app/oracle/oradata/zmdb/assm01.dbf' size 50M;


  6. Tablespace created.


  7. gyj@ZMDB> create table gyj_t5(id int,name varchar2(100)) tablespace assm;


  8. Table created.


  9. gyj@ZMDB> insert into gyj_t5 values(1,'AAAAA');


  10. 1 row created.


  11. gyj@ZMDB> insert into gyj_t5 values(2,'BBBBB');


  12. 1 row created.


  13. gyj@ZMDB> insert into gyj_t5 values(3,'CCCCC');


  14. 1 row created.


  15. gyj@ZMDB> COMMIT;


  16. Commit complete.


  17. gyj@ZMDB> alter system flush buffer_cache;


  18. System altered.


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


  20.      FILE# BLOCK# ID NAME

  21. ---------- ---------- ---------- ----------

  22.         10 135 1 AAAAA

  23.         10 135 2 BBBBB

  24.         10 135 3 CCCCC



  25. BBED> set file 10 block 135

  26.         FILE# 10

  27.         BLOCK# 135


  28. BBED> p kdbr[0]

  29. sb2 kdbr[0] @118 8076


  30. BBED> p *kdbr[0]

  31. rowdata[24]

  32. -----------

  33. ub1 rowdata[24] @8176 0x2c


  34. BBED> x /rnc

  35. rowdata[24] @8176 

  36. -----------

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

  38. lock@8177: 0x01

  39. cols@8178: 2


  40. col 0[2] @8179: 1 

  41. col 1[5] @8182: AAAAA


  42. BBED> p ktbbhict

  43. sb2 ktbbhict @36 2


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


2、我们对MSSM做测试

点击(此处)折叠或打开

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


  2. Tablespace created.



  3. gyj@ZMDB> create table gyj_mssm(id int,name varchar2(100)) tablespace mssm;


  4. Table created.


  5. gyj@ZMDB> insert into gyj_mssm values(4,'DDDDD');


  6. 1 row created.


  7. gyj@ZMDB> insert into gyj_mssm values(5,'EEEEE');


  8. 1 row created.


  9. gyj@ZMDB> insert into gyj_mssm values(6,'FFFFF');


  10. 1 row created.


  11. gyj@ZMDB> commit;


  12. Commit complete.



  13. gyj@ZMDB> col name for a20

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


  15.      FILE# BLOCK# ID NAME

  16. ---------- ---------- ---------- --------------------

  17.         11 129 4 DDDDD

  18.         11 129 5 EEEEE

  19.         11 129 6 FFFFF


  20. BBED> set file 11 block 129

  21.         FILE# 11

  22.         BLOCK# 129


  23. BBED> p kdbr[0]

  24. sb2 kdbr[0] @110 8084


  25. BBED> p *kdbr[0]

  26. rowdata[24]

  27. -----------

  28. ub1 rowdata[24] @8176 0x2c


  29. BBED> x /rnc

  30. rowdata[24] @8176 

  31. -----------

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

  33. lock@8177: 0x01

  34. cols@8178: 2


  35. col 0[2] @8179: 4 

  36. col 1[5] @8182: DDDDD


  37. BBED> p ktbbhict

  38. sb2 ktbbhict @36 2


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


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

点击(此处)折叠或打开

  1. ************MSSM

  2. BBED> set file 11 block 129

  3.         FILE# 11

  4.         BLOCK# 129


  5. BBED> map /v

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

  7.  Block: 129 Dba:0x02c00081

  8. ------------------------------------------------------------

  9.  KTB Data Block (Table/Cluster)


  10.  struct kcbh, 20 bytes @0 

  11.     ub1 type_kcbh @0 

  12.     ub1 frmt_kcbh @1 

  13.     ub1 spare1_kcbh @2 

  14.     ub1 spare2_kcbh @3 

  15.     ub4 rdba_kcbh @4 

  16.     ub4 bas_kcbh @8 

  17.     ub2 wrp_kcbh @12 

  18.     ub1 seq_kcbh @14 

  19.     ub1 flg_kcbh @15 

  20.     ub2 chkval_kcbh @16 

  21.     ub2 spare3_kcbh @18 


  22.  struct ktbbh, 72 bytes @20 

  23.     ub1 ktbbhtyp @20 

  24.     union ktbbhsid, 4 bytes @24 

  25.     struct ktbbhcsc, 8 bytes @28 

  26.     sb2 ktbbhict @36 

  27.     ub1 ktbbhflg @38 

  28.     ub1 ktbbhfsl @39 

  29.     ub4 ktbbhfnx @40 

  30.     struct ktbbhitl[2], 48 bytes @44 


  31.  struct kdbh, 14 bytes @92 

  32.     ub1 kdbhflag @92 

  33.     sb1 kdbhntab @93 

  34.     sb2 kdbhnrow @94 

  35.     sb2 kdbhfrre @96 

  36.     sb2 kdbhfsbo @98 

  37.     sb2 kdbhfseo @100 

  38.     sb2 kdbhavsp @102 

  39.     sb2 kdbhtosp @104 


  40.  struct kdbt[1], 4 bytes @106 

  41.     sb2 kdbtoffs @106 

  42.     sb2 kdbtnrow @108 


  43.  sb2 kdbr[3] @110 


  44.  ub1 freespace[8036] @116 


  45.  ub1 rowdata[36] @8152 


  46.  ub4 tailchk @8188


  47. *****************ASSM

  48. BBED> set file 10 block 135

  49.         FILE# 10

  50.         BLOCK# 135


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

  52.  Block: 141 Dba:0x0280008d

  53. ------------------------------------------------------------

  54.  KTB Data Block (Table/Cluster)


  55.  struct kcbh, 20 bytes @0 

  56.     ub1 type_kcbh @0 

  57.     ub1 frmt_kcbh @1 

  58.     ub1 spare1_kcbh @2 

  59.     ub1 spare2_kcbh @3 

  60.     ub4 rdba_kcbh @4 

  61.     ub4 bas_kcbh @8 

  62.     ub2 wrp_kcbh @12 

  63.     ub1 seq_kcbh @14 

  64.     ub1 flg_kcbh @15 

  65.     ub2 chkval_kcbh @16 

  66.     ub2 spare3_kcbh @18 


  67.  struct ktbbh, 72 bytes @20 

  68.     ub1 ktbbhtyp @20 

  69.     union ktbbhsid, 4 bytes @24 

  70.     struct ktbbhcsc, 8 bytes @28 

  71.     sb2 ktbbhict @36 

  72.     ub1 ktbbhflg @38 

  73.     ub1 ktbbhfsl @39 

  74.     ub4 ktbbhfnx @40 

  75.     struct ktbbhitl[2], 48 bytes @44 


  76.  struct kdbh, 14 bytes @100 

  77.     ub1 kdbhflag @100 

  78.     sb1 kdbhntab @101 

  79.     sb2 kdbhnrow @102 

  80.     sb2 kdbhfrre @104 

  81.     sb2 kdbhfsbo @106 

  82.     sb2 kdbhfseo @108 

  83.     sb2 kdbhavsp @110 

  84.     sb2 kdbhtosp @112 


  85.  struct kdbt[1], 4 bytes @114 

  86.     sb2 kdbtoffs @114 

  87.     sb2 kdbtnrow @116 


  88.  sb2 kdbr[3] @118 


  89.  ub1 freespace[8028] @124 


  90.  ub1 rowdata[36] @8152 


  91.  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。


相关内容

热门资讯

以军士兵集体丢掉武器抗命,大喊... 据凤凰卫视报道,以色列国防军一军事基地7月30日发生士兵抗命事件,约120名士兵抗议指挥官做法,将武...
蒋成华任商务部副部长 国务院任免国家工作人员。任命蒋成华为商务部副部长。免去蒋成华的商务部国际贸易谈判副代表职务。
伊朗驻华大使:在军事威胁下,不... 新华社北京7月31日电(记者刁慧琳) 伊朗驻华大使法兹里7月28日表示,伊美回到谈判桌的前提是美国必...
伊朗革命卫队在霍尔木兹海峡击中... 当地时间31日,伊朗伊斯兰革命卫队发布声明称,革命卫队海军当天在霍尔木兹海峡击中并扣留了两艘违反禁令...
美媒:特朗普,遇到了一个更强硬... 据《纽约时报》7月29日报道,就在特朗普总统看似放弃战事升级计划几天后,美国再次与伊朗交火。上周末,...
女子做气管镜时不幸身亡,丈夫称... 7月29日,西安刘先生反映妻子在当地医院做支气管镜检查时死亡,看监控时发现医生疑有违规操作。刘先生表...
全网“帮卖西瓜”,然后呢? 近日,河南部分地区西瓜滞销的消息在网上热度很高。很多地方也伸出援手:有景区收购千斤西瓜、免费赠予游客...
美媒:乌克兰袭击伊朗船只,险引... 据《纽约时报》7月28日报道,据伊朗和西方官员称,伊朗曾考虑攻击乌克兰的一个港口,以报复乌克兰对一艘...
20年里,他只画美女,用东方风... 迈进KIM在上海的工作室,迎面是一整墙的美女们。她们像是刚从一场时髦的沙龙里退场,或倚或立,眉宇间是...
Google在港推出AI代理G... 观点网讯:7月29日,Google在香港推出AI代理Gemini Spark,该代理可全天候在后台运...