ITPub博客

首页 > Linux操作系统 > Linux操作系统 > oracle redo record scn与transaction相关block scn关系小记

oracle redo record scn与transaction相关block scn关系小记

Linux操作系统 作者:haiross 时间:2014-09-28 13:42:48 0 删除 编辑

 在 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/28355782/viewspace-1283566/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2013-05-24

  • 博文量
    16
  • 访问量
    34498