ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Redo内部解析-Single Row insert (四)

Redo内部解析-Single Row insert (四)

原创 Linux操作系统 作者:yezhibin 时间:2009-06-29 11:25:53 0 删除 编辑
七、表中insert一行记录

具体测试步骤:

1、创建测试环境

SQL>select dbms_flashback.get_system_change_number scn from dual;
                     SCN
           --------------------
               56,399,212,054

SQL> create table test (id number, test varchar2(20));
SQL> insert into test values( 1, 'test');
SQL>commit;

SQL>select dbms_flashback.get_system_change_number scn from dual;
                 SCN
        --------------------
      56,399,212,082

SQL>alter system dump logfile
      '/home/xxxx/xxxx/oradata/xxxx/redo02.log'
     scn min 56399212054
     scn max 56399212082

2、解析trace文件

REDO RECORD - Thread:1 RBA: 0x000f5f.0009d383.00c0 LEN: 0x0144 VLD: 0x01
SCN: 0x000d.21a7ae2d SUBSCN:  1 07/14/2009 11:06:22

CHANGE #1 TYP:0 CLS:33 AFN:2 DBA:0x00800089 OBJ:0 SCN:0x000d.21a7ad93 SEQ:  1 OP:5.2
ktudh redo: slt: 0x0012 sqn: 0x000318b2 flg: 0x0012 siz: 84 fbi: 0
            uba: 0x008018c9.54a5.1c    pxid:  0x0000.000.00000000

--更新undo header,所更新的undo段为(33-11)/2=11

CHANGE #2 TYP:0 CLS:34 AFN:2 DBA:0x008018c9 OBJ:0 SCN:0x000d.21a7ad92 SEQ:  1 OP:5.1
ktudb redo: siz: 84 spc: 1276 flg: 0x0012 seq: 0x54a5 rec: 0x1c
            xid:  0x0009.012.000318b2
ktubl redo: slt: 18 rci: 0 opc: 11.1 objn: 180594 objd: 180594 tsn: 8

--更改undo block信息,记录的对象是180594(表:test);表空间#=8

Undo type:  Regular undo        Begin trans    Last buffer split:  No
Temp Object:  No
Tablespace Undo:  No
             0x00000000  prev ctl uba: 0x008018c9.54a5.1b
prev ctl max cmt scn:  0x000d.21a796dc  prev tx cmt scn:  0x000d.21a79721
KDO undo record:
KTB Redo
op: 0x03  ver: 0x01
op: Z
KDO Op code: DRP row dependencies Disabled

--对于insert 操作,undo操作是drop row记录(DRP)

 xtype: XA flags: 0x00000000  bdba: 0x0200001f  hdba: 0x0200001b

--Undo记录了数据块dba信息(0x0200001f),具体对应file_id和block_id,参看"Redo 内部解析(二)"

itli: 1  ispac: 0  maxfr: 4858
tabn: 0 slot: 0(0x0)

--在row dictionary中指向的slot#是0(0x0)

--所以整个change vector意思是回滚将在数据块=0200001f中,从字典中slot#=0删除行信息。

CHANGE #3 TYP:0 CLS: 1 AFN:8 DBA:0x0200001f OBJ:0 SCN:0x000d.21a7ae2d SEQ:  2 OP:11.2
--更改表段数据块信息

KTB Redo
op: 0x01  ver: 0x01
op: F  xid:  0x0009.012.000318b2    uba: 0x008018c9.54a5.1c
KDO Op code: IRP row dependencies Disabled
  xtype: XA flags: 0x00000000  bdba: 0x0200001f  hdba: 0x0200001b
--数据块地址(bdba)=0x0200001f,段头地址(hdba)=0x0200001b

itli: 1  ispac: 0  maxfr: 4858
tabn: 0 slot: 0(0x0) size/delt: 11
--描述数据块插入一行,在row dictionary中的slot编号;

fb: --H-FL-- lb: 0x1  cc: 2
null: --
col  0: [ 2]  c1 02
col  1: [ 4]  74 65 73 74  --对应test字符

REDO RECORD - Thread:1 RBA: 0x000f5f.0009d385.0010 LEN: 0x0054 VLD: 0x01
SCN: 0x000d.21a7ae30 SUBSCN:  1 07/14/2009 11:06:27
CHANGE #1 TYP:0 CLS:33 AFN:2 DBA:0x00800089 OBJ:0 SCN:0x000d.21a7ae2d SEQ:  1 OP:5.4
ktucm redo: slt: 0x0012 sqn: 0x000318b2 srt: 0 sta: 9 flg: 0x2
ktucf redo: uba: 0x008018c9.54a5.1c ext: 2 spc: 1190 fbi: 0
--表示commit;

总结:
  对于单行的插入操作,redo记录信息为:
  
修改undo header信息(op=5.2) =>修改undo slot信息(op=5.1) =>记录数据块的insert变化(op=11.2) => commit (op=5.4)
 



来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/354732/viewspace-607826/,如需转载,请注明出处,否则将追究法律责任。

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

注册时间:2008-12-18

  • 博文量
    159
  • 访问量
    508272