ITPub博客

首页 > 数据库 > Oracle > 为什么对数据块修改的change的scn会小于对undo块的修改?!

为什么对数据块修改的change的scn会小于对undo块的修改?!

原创 Oracle 作者:mlx_861201 时间:2013-11-25 22:56:30 0 删除 编辑
本帖最后由 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-->
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--> 
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-->
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 <!--保存修改前的数据-->

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

下一篇: Oracle Scn 定义
请登录后发表评论 登录
全部评论

注册时间:2013-01-31

  • 博文量
    11
  • 访问量
    72194