浅析非IMU模式下DML语句产生的REDO日志内容格式

实验内容:非IMU模式下DML语句产生的REDO日志内容格式解读,数据库版本:11.2.0.4

最详细的解读是UPDATE的。

实验环境准备

11G中默认是开启IMU特性的,做此实验需要关闭此特性。

alter system set "_in_memory_undo"=false;

alter system set "_in_memory_undo"=true;  --实验结束后使用此语句改回使用IMU特性。

修改参数完成后,重启数据库:

shutdown immediate;

startup;

准备好实验用的表----BYS.DEPT表。

SYS@ bys3>select object_id from dba_objects where object_name='DEPT';

OBJECT_ID

----------

  22327

SYS@ bys3>select * from bys.dept;

 DEPTNO DNAME          LOC

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

10 ACCOUNTING     NEW YORK

20 RESEARCH       DALLAS

40 OPERATIONS     BOSTON

11 chedan         bj

22 test           sh      

BYS@ bys3>col file_name for a35

SYS@ bys3>col name for a15

SYS@ bys3>select a.file_id,b.ts#,b.name,a.file_name from dba_data_files a,v$tablespace b where a.TABLESPACE_NAME=b.name;

FILE_ID        TS# NAME            FILE_NAME

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

1          0 SYSTEM          /u01/oradata/bys3/system01.dbf

2          1 SYSAUX          /u01/oradata/bys3/sysaux01.dbf

3          2 UNDOTBS1        /u01/oradata/bys3/undotbs01.dbf

4          4 USERS           /u01/oradata/bys3/user01.dbf

###################################################

开始实验分三步,分别是插入、更新、删除语句的操作。最详细的解读是UPDATE的。

实验一:insert 操作的REDO日志解读

会话1: --SYS用户切换日志并查出当前日志名:

SYS@ bys3>alter system switch logfile;

System altered.

col  MEMBER for a30

SYS@ bys3>select a.group#,a.sequence#,a.archived,a.status,b.type,b.member from v$log a,v$logfile b where a.group#=b.group#;

 GROUP#  SEQUENCE# ARC STATUS           TYPE    MEMBER

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

1        310 NO  CURRENT          ONLINE  /u01/oradata/bys3/redo01.log

2        308 YES INACTIVE         ONLINE  /u01/oradata/bys3/redo02.log

3        309 YES ACTIVE           ONLINE  /u01/oradata/bys3/redo03.log

普通用户做插入语句:

SYS@ bys3>conn bys/bys

select * from dept;

Connected.

BYS@ bys3>

 DEPTNO DNAME          LOC

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

10 ACCOUNTING     NEW YORK

20 RESEARCH       DALLAS

40 OPERATIONS     BOSTON

11 chedan         bj

22 test           sh

BYS@ bys3>set time on

20:34:07 BYS@ bys3>insert into dept values(33,'imutest','hz');

1 row created.

20:34:12 BYS@ bys3>commit;

Commit complete.

会话2:DUMP当前REDO日志:

SYS@ bys3>alter system dump logfile '/u01/oradata/bys3/redo01.log';

System altered.

SYS@ bys3>select value from v$diag_info where name like 'De%' ;

VALUE

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

/u01/diag/rdbms/bys3/bys3/trace/bys3_ora_29063.trc

######################

查看此TRACE文件: 方法是:vi /u01/diag/rdbms/bys3/bys3/trace/bys3_ora_29063.trc 然后搜索修改的对象的OBJECT_ID--     22327

详解参考下一步的UPDATE的REDO讲解。

REDO RECORD - Thread:1 RBA: 0x000136.0000000d.0010 LEN: 0x01a0 VLD: 0x05

SCN: 0x0000.00702f08 SUBSCN:  1 01/06/2014 20:34:13

(LWN RBA: 0x000136.0000000d.0010 LEN: 0002 NST: 0001 SCN: 0x0000.00702f08)

CHANGE #1 TYP:0 CLS:21 AFN:3 DBA:0x00c000a0 OBJ:4294967295 SCN:0x0000.00702eda SEQ:1 OP:5.2 ENC:0 RBL:0

ktudh redo: slt: 0x0003 sqn: 0x00000eaa flg: 0x0012 siz: 112 fbi: 0

   uba: 0x00c01ac7.0250.25    pxid:  0x0000.000.00000000

CHANGE #2 TYP:0 CLS:22 AFN:3 DBA:0x00c01ac7 OBJ:4294967295 SCN:0x0000.00702ed9 SEQ:3OP:5.1 ENC:0 RBL:0

ktudb redo: siz: 112 spc: 3494 flg: 0x0012 seq: 0x0250 rec: 0x25

   xid:  0x0003.003.00000eaa

ktubl redo: slt: 3 rci: 0 opc: 11.1 [objn: 22327 objd: 22327 tsn: 4]    ------- tsn: 4,插入的这个是在表空间号为4--OBJ:22327--是插入的对象的OBJECT_ID

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

Temp Object:  No

Tablespace Undo:  No

    0x00000000  prev ctl uba: 0x00c01ac7.0250.22

prev ctl max cmt scn:  0x0000.007029ac  prev tx cmt scn:  0x0000.007029d6

txn start scn:  0xffff.ffffffff  logon user: 32  prev brb: 12589763  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: DRP row dependencies Disabled

xtype: XA flags: 0x00000000  bdba: 0x010000ff  hdba: 0x010000fa

itli: 1  ispac: 0  maxfr: 4858

tabn: 0 slot: 0(0x0)

CHANGE #3 TYP:0 CLS:1 AFN:4 DBA:0x010000ff OBJ:22327 SCN:0x0000.003eec75 SEQ:1 OP:11.2 ENC:0 RBL:0   --OP:11.2 这个应该是插入的操作的了。

KTB Redo               -----AFN:4,插入的这个是在4号数据文件中--OBJ:22327--是插入的对象的OBJECT_ID

op: 0x01  ver: 0x01

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

op: F  xid:  0x0003.003.00000eaa    uba: 0x00c01ac7.0250.25

KDO Op code: IRP row dependencies Disabled

xtype: XA flags: 0x00000000  bdba: 0x010000ff  hdba: 0x010000fa

itli: 1  ispac: 0  maxfr: 4858

tabn: 0 slot: 0(0x0) size/delt: 17

fb: --H-FL-- lb: 0x1  cc: 3

null: ---

col  0: [ 2]  c1 22    ---插入语句是:insert into dept values(33,'imutest','hz');  对应是:select dump(33,16) from dual;  --要注意数字在DUMP时不要加单引号

col  1: [ 7]  69 6d 75 74 65 73 74    --对应select dump('imutest',16) from dual;    [7]--中括号里的是字节数,col  1:对应的是第二列,

col  2: [ 2]  68 7a    ---对应 select dump('hz',16) from dual;    --中括号里的是字节数  col  2: 对应 的是第三列

select chr(to_number(substr(replace('69 6d 75 74 65 73 74',' '),rownum*2-1,2),'xxxxxxxxxxxxxxxx')) from v$bh where rownum<11;

CHR(

----

i

m

u

t

e

s

t

REDO RECORD - Thread:1 RBA: 0x000136.0000000d.01b0 LEN: 0x0060 VLD: 0x01

SCN: 0x0000.00702f09 SUBSCN:  1 01/06/2014 20:34:13                                                    ----OP:5.4,提交操作

CHANGE #1 TYP:0 CLS:21 AFN:3 DBA:0x00c000a0 OBJ:4294967295 SCN:0x0000.00702f08 SEQ:1 OP:5.4 ENC:0 RBL:0

ktucm redo: slt: 0x0003 sqn: 0x00000eaa srt: 0 sta: 9 flg: 0x2 ktucf redo:uba: 0x00c01ac7.0250.25ext: 12 spc: 3380 fbi: 0

############################

实验二:update 操作的REDO日志解读

会话3: --SYS用户切换日志:

SYS@ bys3>alter system switch logfile;

System altered.

SYS@ bys3>col  MEMBER for a30

SYS@ bys3>select a.group#,a.sequence#,a.archived,a.status,b.type,b.member from v$log a,v$logfile b where a.group#=b.group#;

 GROUP#  SEQUENCE# ARC STATUS           TYPE    MEMBER

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

1        310 YES ACTIVE           ONLINE  /u01/oradata/bys3/redo01.log

2        311 NO  CURRENT          ONLINE  /u01/oradata/bys3/redo02.log

3        309 YES INACTIVE         ONLINE  /u01/oradata/bys3/redo03.log

切换到普通用户做更新语句:

SYS@ bys3>conn bys/bys

Connected.

BYS@ bys3>select * from dept;

 DEPTNO DNAME          LOC

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

10 ACCOUNTING     NEW YORK

20 RESEARCH       DALLAS

40 OPERATIONS     BOSTON

11 chedan         bj

22 test           sh

33 imutest        hz

6 rows selected.

BYS@ bys3>set time on

20:39:23 BYS@ bys3>update dept set dname='database' where deptno=11;

1 row updated.

20:39:43 BYS@ bys3>commit;

Commit complete.

20:39:46 BYS@ bys3>

会话4:DUMP当前REDO日志:

SYS@ bys3>alter system dump logfile '/u01/oradata/bys3/redo02.log';

System altered.

SYS@ bys3>select value from v$diag_info where name like 'De%' ;

VALUE

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

时间: 2024-09-13 00:22:56

浅析非IMU模式下DML语句产生的REDO日志内容格式的相关文章

oralce非归档模式下的恢复(二)日志发生切换且历史日志已经被覆盖

案例2:日志发生切换,历史日志已经被覆盖(只能做不完全恢复) 1)模拟环境 SQL> insert into scott.tb01 values(777); 1 row created. SQL> insert into scott.tb01 values(888); 1 row created. SQL> commit; Commit complete. SQL> col status for a10 SQL> select * from v$log; GROUP#    

Oracle IMU模式下REDO格式详解

1. 什么是IMU?IMU的主要作用是什么,也就是说为了解决什么问题? IMU--->In Memory Undo,10g新特性,数据库会在shared pool开辟独立的内存区域用于存储Undo信息, 每个新事务都会分配一个IMU buffer(私有的),一个buffer里有很多node,一个node相当于一个block(回滚块). IMU特性: IMU顾名思义就是在内存中的undo,现在每次更改data block,Oracle 不用去更改这个undo block(也不会生成相应的redo了

ios-IOS获取系统相册图片名称在非ARC模式下报错

问题描述 IOS获取系统相册图片名称在非ARC模式下报错 dispatch_async(dispatch_get_main_queue(), ^{ ALAssetsLibraryAssetForURLResultBlock resultblock = ^(ALAsset *myasset){ ALAssetRepresentation *representation = [myasset defaultRepresentation]; NSString *fileName = [represen

归档和非归档模式下ORA-01145错误的解决方法

总结了一下,在归档和非归档的场景下,ora-01145这个错误可能有如下三种情况: 1.off line tablespace --在非归档模式下尝试ofline 数据文件 SQL> alter tablespace tools offline immediate; alter tablespace tools offline immediate * ERROR at line 1:ORA-01145: offline immediate disallowed unless media reco

oralce非归档模式下的恢复(一)历史日志没有被覆盖(可完全恢复)

案例1: 历史日志没有被覆盖(可以完全恢复) 1)切换到非归档模式 SQL> archive log list Database log mode              Archive Mode Automatic archival             Enabled Archive destination            /disk1/arch/anny Oldest online log sequence     7 Next log sequence to archive  

Vmware Workstation 8 下扩展redhat 的根目录(非LVM模式)

环境介绍:Vmware Workstation 8 下硬盘安装的rhel 5.4 64-bit 系统文件管理的方式为非LVM(逻辑卷管理)关于逻辑卷管理的概念参考博客:http://blog.csdn.net/cymm_liu/article/details/8439127 前提:我已经通过虚拟机的硬盘设置,扩展了硬盘的大小,具体扩展方法参照: http://blog.csdn.net/cymm_liu/article/details/11536041 目的:扩展操作系统根分区大小 步骤: 1.

养成一个好习惯:在严格模式下开发Javascript

前言 坦白说对于Javascript所谓的严格模式在今年早些时候我还一无所知,真正在开发中应用也就几个月.对于这个ECMAScript5就已经引入的东西,已经不能算新了,对于这个东西一直处在字面的理解上,就是"更加严格,规范的限制Javscript代码的书写",今天打算结合使用的经验好好研究下它到底是怎么回事. 正文 Javascript中如果你想你的代码在严格模式下运行,非常简单,只要在代码的第一行,也就是首行加上"use strict"指令即可.对于那些不支持E

PHP CLI模式下的多进程应用分析

PHP在很多时候不适合做常驻的SHELL进程, 他没有专门的gc例程, 也没有有效的内存管理途径. 所以如果用PHP做常驻SHELL, 你会经常被内存耗尽导致abort而unhappy 而且, 如果输入数据非法, 而脚本没有检测, 导致abort, 也会让你很不开心. 那? 怎么办呢? 多进程-. 为什么呢? 优点: 1. 使用多进程, 子进程结束以后, 内核会负责回收资源 2. 使用多进程,子进程异常退出不会导致整个进程Thread退出. 父进程还有机会重建流程. 3. 一个常驻主进程, 只负

Oracle的Archive Log模式下的恢复工作

oracle|恢复     学习并测试了一下Oracle数据库在开启Archive Log模式下的恢复. 系统是Win2K Server+Oracle 8.1.7. 参考了Chinaunix.net和ITPub.com网站相关资料.在此感谢给我的帮助. 注意,养成一个好的习惯非常重要.在开始恢复之前,以及恢复完成后,都要做一个系统全备份. 首先,要开启Archive Log归档日志模式 1. 关闭数据库 2. 修改initSID.ora文件.这个文件通常在$ORACLE_HOME/admin/$