為什麼對資料塊修改的change的scn會小於對undo塊的修改?!

mlx_861201發表於2013-11-25
本帖最後由 mlx_861201 於 2013-5-8 06:32 編輯

大家好!
     我有個疑惑。測試環境是oracle11G

1、對一條資料做upate操作。
2、dump current 日誌檔案。
3、根據obj找到日誌資訊。
疑問:
      1、 為什麼對資料塊修改的change的scn會小於對undo塊的修改?!
    2、對資料塊的修改為什麼不是“OP:11.5”而是“OP:11.19”
日誌資訊如下:
REDO RECORD - Thread:1 RBA: 0x000085.0000003a.0010 LEN: 0x01e4 VLD: 0x0d
SCN: 0x0000.003d5264 SUBSCN:  1 03/17/2013 16:24:29
<!--對資料塊的修改產生的CHANGE--&gt
CHANGE #1 TYP:0 CLS:1 AFN:4 DBA:0x01000226 OBJ:76014 SCN:0x0000.003d51ee SEQ:1 OP:11.19 ENC:0 RBL:0
KTB Redo 
op: 0x01  ver: 0x01  
compat bit: 4 (post-11) padding: 1
op: F  xid:  0x0009.000.000012b6    uba: 0x00c002a4.0231.05
Array Update of 1 rows: 
tabn: 0 slot: 1(0x1) flag: 0x2c lock: 1 ckix: 191
ncol: 3 nnew: 1 size: 0
KDO Op code:  21 row dependencies Disabled
  xtype: XAxtype KDO_KDOM2 flags: 0x00000080  bdba: 0x01000226  hdba: 0x01000222
itli: 1  ispac: 0  maxfr: 4858
vect = 4
col  1: [ 2]  c1 4e <!--儲存修改後的資料 >

<!--對undo段頭塊修改從產生的CHANGE--&gt 
CHANGE #2 TYP:0 CLS:33 AFN:3 DBA:0x00c00100 OBJ:4294967295 SCN:0x0000.003d5220 SEQ:2 OP:5.2 ENC:0 RBL:0
ktudh redo: slt: 0x0000 sqn: 0x000012b6 flg: 0x0012 siz: 184 fbi: 0
            uba: 0x00c002a4.0231.05    pxid:  0x0000.000.00000000
<!--對undo塊修改產生的CHANGE--&gt
CHANGE #3 TYP:0 CLS:34 AFN:3 DBA:0x00c002a4 OBJ:4294967295 SCN:0x0000.003d5220 SEQ:1 OP:5.1 ENC:0 RBL:0
ktudb redo: siz: 184 spc: 7674 flg: 0x0012 seq: 0x0231 rec: 0x05
            xid:  0x0009.000.000012b6  
ktubl redo: slt: 0 rci: 0 opc: 11.1 [objn: 76014 objd: 76014 tsn: 4]
Undo type:  Regular undo        Begin trans    Last buffer split:  No 
Temp Object:  No 
Tablespace Undo:  No 
             0x00000000  prev ctl uba: 0x00c002a4.0231.04 
prev ctl max cmt scn:  0x0000.003d006c  prev tx cmt scn:  0x0000.003d006d 
txn start scn:  0x0000.003d51ee  logon user: 99  prev brb: 12583569  prev bcl: 0 BuExt idx: 0 flg2: 0
KDO undo record:
KTB Redo 
op: 0x04  ver: 0x01  
compat bit: 4 (post-11) padding: 1
op: L  itl: xid:  0x0003.01c.0000128a uba: 0x00c00dca.0236.1d
                      flg: C---    lkc:  0     scn: 0x0000.003b655d
Array Update of 1 rows: 
tabn: 0 slot: 1(0x1) flag: 0x2c lock: 0 ckix: 191
ncol: 3 nnew: 1 size: 0
KDO Op code:  21 row dependencies Disabled
  xtype: XAxtype KDO_KDOM2 flags: 0x00000080  bdba: 0x01000226  hdba: 0x01000222
itli: 1  ispac: 0  maxfr: 4858
vect = 4
col  1: [ 2]  c1 4c <!--儲存修改前的資料--&gt

解答:
       1、 為什麼對資料塊修改的change的scn會小於對undo塊的修改?!
         change中的SCN並不是redo資訊產生或則寫入的SCN而是被修改資料塊的SCN資訊。
         2、對資料塊的修改為什麼不是“OP:11.5”而是“OP:11.19” 
          if there is not a unique index on this table, in Oracle 10.2.0.4 (at least) an 11.19 operation will be generated instead of a 11.5 operation. 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/11693228/viewspace-1061077/,如需轉載,請註明出處,否則將追究法律責任。

相關文章