在 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博客 ” ,链接:https://blog.itpub.net/28355782/viewspace-1283566/ ,如需转载,请注明出处,否则将追究法律责任。