|
别的问题很多人都回答了,这里我就不说啦
以下做的是在In Memory Undo下面的实验,分析一下字节,
测试环境:
系统:linux6.4
数据库:11.2.0.1.0
SQL> select rowid,tt.* from tt;
ROWID DEPTNO DNAME LOC
------------------ ---------- -------------- -------------
AAAR7LAAFAAAACDAAA 10 GUANGZ NEW YORK
AAAR7LAAFAAAACDAAB 20 GUANGS DALLAS
SQL>
SQL> select object_name,object_id from user_objects where object_name='TT'; --------查询表的OBJECT_ID
OBJECT_NAME OBJECT_ID
--------------------------------------
TT 73419
-->使用dbms_rowid包获得rowid的十进制信息
SQL> select dbms_rowid.rowid_object(rowid) object_id,
2 dbms_rowid.rowid_relative_fno(rowid) file_id,
3 dbms_rowid.rowid_block_number(rowid) block_id,
4 dbms_rowid.rowid_row_number(rowid)
5 from tt;
OBJECT_ID FILE_ID BLOCK_ID DBMS_ROWID.ROWID_ROW_NUMBER(ROWID)
---------- ---------- ---------- ----------------------------------
73419 5 131 0
73419 5 131 1
SQL> select GROUP#,BYTES,STATUS from v$log; ------查找当前在线日志状态
GROUP# BYTES STATUS
---------- ---------- ----------------
1 52428800 INACTIVE
2 52428800 INACTIVE
3 52428800 CURRENT
SQL> select GROUP#,MEMBER from v$logfile; -------------查找当前在线的对应文件
GROUP# MEMBER
------------------------------------------------------------------------------------------
3 /u01/app/oracle/oradata/dbt/redo03.log
2 /u01/app/oracle/oradata/dbt/redo02.log
1 /u01/app/oracle/oradata/dbt/redo01.log
--------------------------------------------------------------------------------------------
SQL> update tt set dname='GGGGGGG' where deptno=10;
1 row updated.
SQL> update tt set dname='uuuuuuuu' where deptno=20;
1 row updated.
SQL> commit;
Commit complete.
SQL> ALTER SYSTEM DUMP LOGFILE '/u01/app/oracle/oradata/dbt/redo01.log';
System altered.
----------------------------------打开 dump文件dbt_ora_3755.trc----------------------------------------
根据OBJECT_ID查找:我实验OBJECT_ID:73419
一条记日志==》6个CHANGE VECTOR -----------------跟着下面dump出来的可以查到
CHANGE #1 ==>OP:11.9 修改后的dname=GGGGGGG的值
CHANGE #2 ==>OP:5.2 update rollback segment header
CHANGE #3 ==>OP:11.9 修改后的dname=uuuuuuuu的值
CHANGE #4 ==>OP:5.4 --->COMMIT
CHANGE #5 ==>OP:5.1 --->undo块中dname=GUANGZ的前映像
CHANGE #6 ==>OP:5.1 --->undo块中dname=GUANGS的前映像
Redo Record Header -----Redo记录头
Thread--线程数
RBA-----Redo字节地址(确定起始redo 记录)
LEN-----记录长度(bytes)
SCN-----系统改变号* (6 bytes)
SUBSCN----改变的日期和时间
CHANGE(改变向量)
CHANGE--改变数
TYP-----改变类型
CLS-----类
AFN-----绝对文件号
DBA-----相对数据库块地址
SEQ----序列号 (相对于SCN)
OP-----操作代码
REDO RECORD - Thread:1 RBA: 0x000010.00000015.0010 LEN: 0x031c VLD: 0x0d
SCN: 0x0000.000e354f SUBSCN: 1 01/09/2014 18:12:17
CHANGE #1 TYP:2 CLS:1 AFN:5 DBA:0x01400083 OBJ:73419 SCN:0x0000.000e3241 SEQ:1 OP:11.5 ENC:0 RBL:0
KTB Redo
op: 0x11 ver: 0x01
compat bit: 4 (post-11) padding: 1
op: F xid: 0x000a.00f.00000202 uba: 0x00c00162.00c7.23
Block cleanout record, scn: 0x0000.000e3544 ver: 0x01 opt: 0x02, entries follow...
itli: 1 flg: 2 scn: 0x0000.000e3241
KDO Op code: URP row dependencies Disabled
xtype: XA flags: 0x00000000 bdba: 0x01400083 hdba: 0x01400082
itli: 2 ispac: 0 maxfr: 4858
tabn: 0 slot: 0(0x0) flag: 0x2c lock: 2 ckix: 191
ncol: 3 nnew: 1 size: 1
col 1: [ 7] 47 47 47 47 47 47 47 ----修改的值
CHANGE #2 TYP:0 CLS:35 AFN:3 DBA:0x00c00110 OBJ:4294967295 SCN:0x0000.000e34ca SEQ:1 OP:5.2 ENC:0 RBL:0
ktudh redo: slt: 0x000f sqn: 0x00000202 flg: 0x0012 siz: 164 fbi: 0
uba: 0x00c00162.00c7.23 pxid: 0x0000.000.00000000
CHANGE #3 TYP:0 CLS:1 AFN:5 DBA:0x01400083 OBJ:73419 SCN:0x0000.000e354f SEQ:1 OP:11.5 ENC:0 RBL:0
KTB Redo
op: 0x02 ver: 0x01
compat bit: 4 (post-11) padding: 1
op: C uba: 0x00c00162.00c7.24
KDO Op code: URP row dependencies Disabled
xtype: XA flags: 0x00000000 bdba: 0x01400083 hdba: 0x01400082
itli: 2 ispac: 0 maxfr: 4858
tabn: 0 slot: 1(0x1) flag: 0x2c lock: 2 ckix: 191
ncol: 3 nnew: 1 size: 2
col 1: [ 8] 75 75 75 75 75 75 75 75 -----修改的值
CHANGE #4 TYP:0 CLS:35 AFN:3 DBA:0x00c00110 OBJ:4294967295 SCN:0x0000.000e354f SEQ:1 OP:5.4 ENC:0 RBL:0
ktucm redo: slt: 0x000f sqn: 0x00000202 srt: 0 sta: 9 flg: 0x2 ktucf redo: uba: 0x00c00162.00c7.24 ext: 2 spc: 2938 fbi: 0
CHANGE #5 TYP:0 CLS:36 AFN:3 DBA:0x00c00162(undo的BLOCK_ID) OBJ:4294967295 SCN:0x0000.000e34c9 SEQ:6 OP:5.1 ENC:0 RBL:0
ktudb redo: siz: 164 spc: 3202 flg: 0x0012 seq: 0x00c7 rec: 0x23
xid: 0x000a.00f.00000202
ktubl redo: slt: 15 rci: 0 opc: 11.1 [objn: 73419 objd: 73419 tsn: 7]
Undo type: Regular undo Begin trans Last buffer split: No
Temp Object: No
Tablespace Undo: No
0x00000000 prev ctl uba: 0x00c00162.00c7.1f
prev ctl max cmt scn: 0x0000.000e3000 prev tx cmt scn: 0x0000.000e300e
txn start scn: 0x0000.000e3537 logon user: 85 prev brb: 12583189 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: 0x0004.00f.000001f6 uba: 0x00c0033d.007c.03
flg: C--- lkc: 0 scn: 0x0000.000d9fb9
KDO Op code: URP row dependencies Disabled
xtype: XA flags: 0x00000000 bdba: 0x01400083 hdba: 0x01400082
itli: 2 ispac: 0 maxfr: 4858
tabn: 0 slot: 0(0x0) flag: 0x2c lock: 0 ckix: 191
ncol: 3 nnew: 1 size: -1
col 1: [ 6] 47 55 41 4e 47 5a -----修改前的值
CHANGE #6 TYP:0 CLS:36 AFN:3 DBA:0x00c00162(undo的BLOCK_ID) OBJ:4294967295 SCN:0x0000.000e354f SEQ:1 OP:5.1 ENC:0 RBL:0
ktudb redo: siz: 96 spc: 3036 flg: 0x0022 seq: 0x00c7 rec: 0x24
xid: 0x000a.00f.00000202
ktubu redo: slt: 15 rci: 35 opc: 11.1 objn: 73419 objd: 73419 tsn: 7
Undo type: Regular undo Undo type: Last buffer split: No
Tablespace Undo: No
0x00000000
KDO undo record:
KTB Redo
op: 0x02 ver: 0x01
compat bit: 4 (post-11) padding: 1
op: C uba: 0x00c00162.00c7.23
KDO Op code: URP row dependencies Disabled
xtype: XA flags: 0x00000000 bdba: 0x01400083 hdba: 0x01400082
itli: 2 ispac: 0 maxfr: 4858
tabn: 0 slot: 1(0x1) flag: 0x2c lock: 0 ckix: 191
ncol: 3 nnew: 1 size: -2
col 1: [ 6] 47 55 41 4e 47 53 ----------修改前的值
-----------------------------------------------------------------------------
CHANGE #4 TYP:0 CLS:35 AFN:3 DBA:0x00c00110 OBJ:4294967295 SCN:0x0000.000e354f SEQ:1 OP:5.4 ENC:0 RBL:0
CHANGE #6 TYP:0 CLS:36 AFN:3 DBA:0x00c00162 OBJ:4294967295 SCN:0x0000.000e354f SEQ:1 OP:5.1 ENC:0 RBL:0
CHANGE #4和CHANGE #6的SCN:0x0000.000e354f 是一样,我猜测这一步是同时进行的
IMU的主要作用是什么?
IMU是在共亨内存中,独立存在的区域,专门用来存储UNDO信息(为了避免Undo信息在Buffer Cache中的I/O)这样可以进一步的减少Redo生成,
因为时间问题,这个实验做得不太完整,有时间,再做一下,insert,delete实验,,,
|
|