oracle redo record scn與transaction相關block scn關係小記

wisdomone1發表於2013-03-23

 在 oracle dump redo系列一,我們發現redo record會記錄scn,這個scn到底是什麼呢
和data block的itl上面的scn有什麼關係嗎?

/***********我們dump下表記錄對應的資料塊*********/
alter system dump datafile 10  block   276635;

/********資料塊的trace******************/
--注意:資料塊的scn是寫在資料塊的頭部,也叫資料塊頭,而非itl上
Block dump from cache:
Dump of buffer cache at level 4 for tsn=8, rdba=42219675
Block dump from disk:
buffer tsn: 8 rdba: 0x0284389b (10/276635)
scn: 0x0000.009bfd97 seq: 0x02 flg: 0x04 tail: 0xfd970602
frmt: 0x02 chkval: 0x7d5a type: 0x06=trans data

/******redo record中的scn***************/
scn: 0x0000.009bfd97 seq: 0x02 flg: 0x04 tail: 0xfd970602

小結:redo logfile中的scn就是表資料塊中的scn,這樣oracle就實時掌握對資料塊修改的實時情況

  另一個問題:在redo record中也記錄了對undo header block及undo block的scn,它們的scn我想和上面
同理,也是記錄在undo header block和undo block吧,我們dump看下:

/***************先看undo block********************/

* Rec #0x38  slt: 0x03  objn: 458(0x000001ca)  objd: 458  tblspc: 0(0x00000000) -- objd: 458即內部表MON_MODS$
*       Layer:  11 (Row)   opc: 1   rci 0x00  
Undo type:  Regular undo    Begin trans    Last buffer split:  No
Temp Object:  No
Tablespace Undo:  No
rdba: 0x00000000Ext idx: 0
flg2: 0
*-----------------------------
uba: 0x00c1bddc.01b5.37 ctl max scn: 0x0000.009abe27 prv tx scn: 0x0000.009acfd9
--這裡還標明是事務開始的scn,所以我理解如果有提交還有提交或結束scn
txn start scn: scn: 0x0000.009bfccb logon user: 0  --這就是undo block的scn,這裡準確來說是undo block 撤消記錄條目的scn,因為每個撤消記錄條目會記錄對於真正資料塊不同的操作,可能會對應不同的資料塊或相同的資料塊多條操作
 prev brb: 12624014 prev bcl: 0
KDO undo record:
KTB Redo
op: 0x04  ver: 0x01 
compat bit: 4 (post-11) padding: 0
op: L  itl: xid:  0x004d.000.00000095 uba: 0x00c0207b.01d5.2a
                      flg: C---    lkc:  0     scn: 0x0000.009bfcc8
KDO Op code: URP row dependencies Disabled
  xtype: XAxtype KDO_KDOM2 flags: 0x00000080  bdba: 0x00400c39  hdba: 0x00400c38 
itli: 1  ispac: 0  maxfr: 4863
tabn: 0 slot: 56(0x38) flag: 0x2c lock: 0 ckix: 24
ncol: 7 nnew: 6 size: 0
Vector content:
col  1: [ 3]  c2 02 33
col  2: [ 1]  80
col  3: [ 3]  c2 02 0d
col  4: [ 7]  78 71 03 17 15 10 06
col  5: [ 1]  80
col  6: [ 1]  80

/***************再看看下redo中的undo block的redo部分********************/
第2個改變向量     
CHANGE #2 TYP:0 CLS:82 AFN:3 DBA:0x00c1bddc OBJ:4294967295 SCN:0x0000.009bfccb SEQ:1 OP:5.1 ENC:0 RBL:0 ---這就是redo 中的undo block的scn
ktudb redo: siz: 108 spc: 3154 flg: 0x0012 seq: 0x01b5 rec: 0x39

小結:redo的undo block scn與undo block的undo record的scn一致


---再看看undo header block與redo中的undo header block的redo scn的關係

/*********這是undo header block 的trace/
TRN TBL::
 
  index  state cflags  wrap#    uel         scn            dba            parent-xid    nub     stmt_num    cmt
  ------------------------------------------------------------------------------------------------
  0x03    9    0x00  0x009b  0xffff  0x0000.009bfccc  0x00c1bddc  0x0000.000.00000000  0x00000001   0x00000000  1364042105

/*********這是redo中的undo header block redo部分/ 
REDO RECORD - Thread:1 RBA: 0x000314.0000d941.0010 LEN: 0x015c VLD: 0x01
SCN: 0x0000.009bfd97 SUBSCN:  2 03/23/2013 20:35:48 
CHANGE #1 TYP:0 CLS:81 AFN:3 DBA:0x00c01958 OBJ:4294967295 SCN:0x0000.009bfccc SEQ:1 OP:5.2 ENC:0 RBL:0
ktudh redo: slt: 0x0018 sqn: 0x0000009c flg: 0x0012 siz: 108 fbi: 0
            uba: 0x00c1bddc.01b5.39    pxid:  0x0000.000.00000000 --這個uba即undo block對應下面的change #2 

小結:redo中的undo header block scn與undo header block的scn是一致的


小結:1,日誌redo會同步把data block和undo header|block的scn完整記錄在redo中
      2,data block header scn與undo block scn及undo header block scn是一致(測試中發現)           

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

相關文章