暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle redo IMU 与非IMU区别

oracle分享技术 2021-02-06
412

redo 在 10G 以后增加了新功能就是  in memory undo

我们看一下  10G 前的 redo 与 in memory undo 的区别


1.非IMU 环境测试

SQL> set linesize 132

SQL> column name format a30

SQL> column value format a25

SQL> SELECT x.ksppinm NAME, y.ksppstvl VALUE FROM SYS.x$ksppi x, SYS.x$ksppcv y WHERE x.indx = y.indx AND x.ksppinm = '_in_memory_undo';


NAME                           VALUE

------------------------------ -------------------------

_in_memory_undo                TRUE


有看到  _in_memory_undo 是开启的


我们现在 修改参数


SQL> alter system set "_in_memory_undo" = false scope=spfile;


系统已更改。


SQL> startup force;

ORACLE 例程已经启动。


Total System Global Area 1.2827E+10 bytes

Fixed Size                  2240344 bytes

Variable Size            1644167336 bytes

Database Buffers         1.1174E+10 bytes

Redo Buffers                7335936 bytes

数据库装载完毕。

数据库已经打开。




建立测试表



SQL> create table system.wh as select * from dba_objects;


表已创建。


SQL> alter system switch logfile;


系统已更改。



做一次更新操作


SQL> update system.wh set object_name='wh' where object_id=2;


已更新 1 行。


SQL> commit;


提交完成。



定位redo 文件


SQL> select group#, SEQUENCE#,status from v$log;


    GROUP#  SEQUENCE# STATUS

---------- ---------- ----------------

         1       3289 INACTIVE

         2       3290 INACTIVE

         3       3291 INACTIVE

         4       3292 INACTIVE

         5       3293 ACTIVE

         6       3294 CURRENT


已选择6行。

SQL> select member from v$logfile where group#=6;


MEMBER

--------------------------------------------------------------------------------

/u01/app/oracle/oradata/orcl/redo06.log


将 redo 信息dump 出来



分析 trc 文件内容


由于文件里过多 REDO RECORD  .我们根据 object_name='wh'  wh 这个字符来定位



Typ=96 Len=2: 77,68





REDO RECORD - Thread:1 RBA: 0x000cde.00000007.0010 LEN: 0x01a0 VLD: 0x05

SCN: 0x0dcd.742ebacb SUBSCN:  1 03/13/2017 11:04:50

(LWN RBA: 0x000cde.00000007.0010 LEN: 0002 NST: 0001 SCN: 0x0dcd.742ebaca)  <=  描述REDO RECORD的基本信息,就是REDO RECORDER头

CHANGE #1 TYP:0 CLS:19 AFN:3(3号文件) DBA:0x00c00090(144数据块) OBJ:4294967295 SCN:0x0dcd.742ebac4 SEQ:1 OP:5.2 ENC:0 RBL:0

ktudh redo: slt: 0x000b sqn: 0x000252e3 flg: 0x0012 siz: 140 fbi: 0

            uba: 0x00c009bb.1597.1e    pxid:  0x0000.000.00000000

CHANGE #2 TYP:0 CLS:20 AFN:3(3号文件) DBA:0x00c009bb(2491数据块) OBJ:4294967295 SCN:0x0dcd.742ebac3 SEQ:3 OP:5.1 ENC:0 RBL:0

ktudb redo: siz: 140 spc: 2360 flg: 0x0012 seq: 0x1597 rec: 0x1e

            xid:  0x0002.00b.000252e3  

ktubl redo: slt: 11 rci: 0 opc: 11.1 [objn: 150827 objd: 150827 tsn: 0]

Undo type:  Regular undo        Begin trans    Last buffer split:  No 

Temp Object:  No 

Tablespace Undo:  No 

             0x00000000  prev ctl uba: 0x00c009bb.1597.1b 

prev ctl max cmt scn:  0x0dcd.740b6c6a  prev tx cmt scn:  0x0dcd.740b6c6c 

txn start scn:  0xffff.ffffffff  logon user: 0  prev brb: 12585401  prev bcl: 0 BuExt idx: 0 flg2: 0

KDO undo record:

KTB Redo 

op: 0x03  ver: 0x01  

compat bit: 4 (post-11) padding: 1

op: Z

KDO Op code: URP row dependencies Disabled

  xtype: XA flags: 0x00000000  bdba: 0x00417461  hdba: 0x00417460

itli: 2  ispac: 0  maxfr: 4863

tabn: 0 slot: 48(0x30) flag: 0x2c lock: 0 ckix: 0

ncol: 14 nnew: 1 size: 4

col  1: [ 6]  43 5f 4f 42 4a 23(C_OBJ#)  <= 更改前的object_name

CHANGE #3 TYP:0 CLS:1 AFN:1 DBA:0x00417461 OBJ:150827 SCN:0x0dcd.742eba7b SEQ:2 OP:11.5 ENC:0 RBL:0

KTB Redo 

op: 0x01  ver: 0x01  

compat bit: 4 (post-11) padding: 1

op: F  xid:  0x0002.00b.000252e3    uba: 0x00c009bb.1597.1e

KDO Op code: URP row dependencies Disabled

  xtype: XA flags: 0x00000000  bdba: 0x00417461  hdba: 0x00417460

itli: 2  ispac: 0  maxfr: 4863

tabn: 0 slot: 48(0x30) flag: 0x2c lock: 2 ckix: 0

ncol: 14 nnew: 1 size: -4

col  1: [ 2]  77 68 (wh) <= 更改后的object_name



2.IMU 进行测试



SQL> alter system set "_in_memory_undo" = true scope=spfile;


系统已更改。


SQL> startup force;

ORACLE 例程已经启动。


Total System Global Area 1.2827E+10 bytes

Fixed Size                  2240344 bytes

Variable Size            1644167336 bytes

Database Buffers         1.1174E+10 bytes

Redo Buffers                7335936 bytes

数据库装载完毕。

数据库已经打开。


创建测试表


SQL> drop table system.wh;


表已删除。


SQL> create table system.wh as select * from dba_objects;


表已创建。


SQL> alter system switch logfile;


系统已更改。



做一次commit 操作


SQL> update system.wh set object_name='wh' where object_id=2;


已更新 1 行。


SQL> commit;


提交完成。


定位 redo 文件



SQL>  select group#, SEQUENCE#,status from v$log;


    GROUP#  SEQUENCE# STATUS

---------- ---------- ----------------

         1       3295 ACTIVE

         2       3296 CURRENT

         3       3291 INACTIVE

         4       3292 INACTIVE

         5       3293 INACTIVE

         6       3294 INACTIVE


已选择6行。


SQL> 

SQL>  select member from v$logfile where group#=2;


MEMBER

--------------------------------------------------------------------------------

/u01/app/oracle/oradata/orcl/redo02.log




我们获取trc文件内容


REDO RECORD - Thread:1 RBA: 0x000ce0.00000003.0010 LEN: 0x01e8 VLD: 0x0d

SCN: 0x0dcd.7463dfd0 SUBSCN:  1 03/13/2017 11:37:21

(LWN RBA: 0x000ce0.00000003.0010 LEN: 0001 NST: 0001 SCN: 0x0dcd.7463dfcf)    <=  描述REDO RECORD的基本信息,就是REDO RECORDER头

CHANGE #1 TYP:0 CLS:1 AFN:1 DBA:0x00417461 OBJ:150832 SCN:0x0dcd.7463df8c SEQ:1 OP:11.5 ENC:0 RBL:0

KTB Redo 

op: 0x01  ver: 0x01  

compat bit: 4 (post-11) padding: 1

op: F  xid:  0x0004.01d.00026ba9    uba: 0x00c028b7.1be9.20

KDO Op code: URP row dependencies Disabled

  xtype: XA flags: 0x00000000  bdba: 0x00417461  hdba: 0x00417460

itli: 2  ispac: 0  maxfr: 4863

tabn: 0 slot: 48(0x30) flag: 0x2c lock: 2 ckix: 0

ncol: 14 nnew: 1 size: -4

col  1: [ 2]  77 68  (wh)  <= 更改后的object_name

CHANGE #2 TYP:0 CLS:23 AFN:3 DBA:0x00c000b0 OBJ:4294967295 SCN:0x0dcd.7463df74 SEQ:1 OP:5.2 ENC:0 RBL:0

ktudh redo: slt: 0x001d sqn: 0x00026ba9 flg: 0x0012 siz: 140 fbi: 0

            uba: 0x00c028b7.1be9.20    pxid:  0x0000.000.00000000

CHANGE #3 TYP:0 CLS:23 AFN:3 DBA:0x00c000b0 OBJ:4294967295 SCN:0x0dcd.7463dfd0 SEQ:1 OP:5.4 ENC:0 RBL:0

ktucm redo: slt: 0x001d sqn: 0x00026ba9 srt: 0 sta: 9 flg: 0x2 ktucf redo: uba: 0x00c028b7.1be9.20 ext: 110 spc: 3890 fbi: 0 

CHANGE #4 TYP:0 CLS:24 AFN:3 DBA:0x00c028b7 OBJ:4294967295 SCN:0x0dcd.7463df73 SEQ:1 OP:5.1 ENC:0 RBL:0

ktudb redo: siz: 140 spc: 4032 flg: 0x0012 seq: 0x1be9 rec: 0x20

            xid:  0x0004.01d.00026ba9  

ktubl redo: slt: 29 rci: 0 opc: 11.1 [objn: 150832 objd: 150832 tsn: 0]

Undo type:  Regular undo        Begin trans    Last buffer split:  No 

Temp Object:  No 

Tablespace Undo:  No 

             0x00000000  prev ctl uba: 0x00c028b6.1be9.18 

prev ctl max cmt scn:  0x0dcd.74265910  prev tx cmt scn:  0x0dcd.74265927 

txn start scn:  0x0dcd.7463dfbe  logon user: 0  prev brb: 12593331  prev bcl: 0 BuExt idx: 0 flg2: 0

KDO undo record:

KTB Redo 

op: 0x03  ver: 0x01  

compat bit: 4 (post-11) padding: 1

op: Z

KDO Op code: URP row dependencies Disabled

  xtype: XA flags: 0x00000000  bdba: 0x00417461  hdba: 0x00417460

itli: 2  ispac: 0  maxfr: 4863

tabn: 0 slot: 48(0x30) flag: 0x2c lock: 0 ckix: 0

ncol: 14 nnew: 1 size: 4

col  1: [ 6]  43 5f 4f 42 4a 23    (C_OBJ#)   <=  更新前的数值



IMU 与 非IMU 区别在于 多条commit 内容合并,这个测试只是  一条记录commit ,所以看不出区别.

大家可以亲自动手一下,测试一下  IMU 与  非IMU  redo 的区别



最后修改时间:2021-02-06 16:11:27
文章转载自oracle分享技术,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论