注意:实验中INSERT和DELETE是先后做的,UPDATE操作是其它时间做的,UPDATE实验时的表数据和另两步不一样。
DML操作的change rector产生顺序汇总如下: --DML实验及DUMP的REDO日志见下面具体实验步骤。
INSERT --涉及有索引的字段CHANGE #1 OP:11.2 --插入操作
CHANGE #2 OP:5.2 --operation code 向UNDO段头的事务表写事务信息-事务开始
CHANGE #3 OP:10.2 --10.2 是插入索引叶子块
CHANGE #4 OP:5.4 ----提交
CHANGE #5 OP:5.1 --把表内数据修改前值放到UNDO--objn: 22327,插入的表的对象ID。
CHANGE #6 OP:5.1 --把索引数据修改前值放到UNDO--objn: 22818,索引对象ID。
一条INSERT语句为什么写了两次OP:5.1操作,是因为存在索引。
#################
UPDATE:--这个操作没涉及索引的字段
CHANGE#1 OP:11.19 --或者OP:11.5都是--UPDATE语句,开始修改数据,
CHANGE#2 OP:5.2 --operation code 向UNDO段头的事务表写事务信息-事务开始
CHANGE#3 OP:11.19 --或者OP:11.5都是--UPDATE语句,开始修改数据,
CHANGE #4 OP:5.4 --提交
CHANGE #5 OP:5.1 --把表内数据修改前值放到UNDO
CHANGE #6 OP:5.1 --把表内数据修改前值放到UNDO
################
DELETE: --涉及有索引的字段
CHANGE #1 OP:11.3 --DELETE语句的操作
CHANGE #2 OP:5.2 --operation code 向UNDO段头的事务表写事务信息-事务开始
CHANGE #3 OP:10.4 --删除索引叶子块
CHANGE #4 OP:5.4 --提交
CHANGE #5 OP:5.1 --把表内数据修改前值放到UNDO
CHANGE #6 OP:5.1 --把索引数据修改前值放到UNDO
一条DELETE语句为什么写了两次OP:5.1操作,是因为存在索引。
以上INSERT及DELETE时涉及的对索引的操作,如表上无索引,将涉及索引的CHANGE #条目去除,就是正常的CHANGE 产生顺序。
具体实验详情如下:--确保环境已经改为使用IMU。alter system set "_in_memory_undo"=true;
insert操作:
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 322 YES INACTIVE ONLINE /u01/oradata/bys3/redo01.log
2 323 YES ACTIVE ONLINE /u01/oradata/bys3/redo02.log
3 324 NO CURRENT ONLINE /u01/oradata/bys3/redo03.log
Connected.
BYS@ bys3>select * from dept;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
40 OPERATIONS BOSTON
11 database bj
22 dataoracle sh
BYS@ bys3>select a.index_owner,a.index_name,b.object_id,a.table_owner,a.table_name,a.column_name from all_ind_columns a,dba_objects b where a.index_owner='BYS' and a.index_name=b.object_name;
INDEX_OWNE INDEX_NAME OBJECT_ID TABLE_OWNE TABLE_NAME COLUMN_NAM
---------- ---------- ---------- ---------- ------------------------------ ----------
BYS INDTEXT 22818 BYS DEPT DEPTNO
BYS@ bys3>set time on
19:35:01 BYS@ bys3>insert into dept values(66,'imutest2','zhengzhou');
1 row created.
19:35:33 BYS@ bys3>commit;
Commit complete.
19:35:40 BYS@ bys3>
另一会话:
BYS@ bys3>alter system dump logfile '/u01/oradata/bys3/redo03.log';
System altered.
BYS@ bys3>select value from v$diag_info where name like 'De%' ;
VALUE
----------------------------------------------------------------------------------------------------
/u01/diag/rdbms/bys3/bys3/trace/bys3_ora_28763.trc
BYS@ bys3>select chr(to_number(substr(replace('c1 43',' '),rownum*2-1,2),'xxxxxxxx')),chr(to_number(substr(replace('69 6d 75 74 65 73 74 32',' '),rownum*2-1,2),'xxxxxxxx')),chr(to_number(substr(replace('7a 68 65 6e 67 7a 68 6f 75',' '),rownum*2-1,2),'xxxxxxxx')) from v$bh where rownum<9;
CHR( CHR( CHR(
---- ---- ----
i z
C m h
u e
t n
e g
s z
t h
2 o
##########################