使用10203事件来跟踪oracle块清除
使用10203事件来跟踪oracle块清除
oracle数据库块清除的概念,在事物提交前,数据已经写到硬盘上,但还未清楚锁相关信息,需要下次访问该块时才进行清除
Oracle的10203事件可以用来跟踪数据库的块清除(cleanout)操作,从事件列表中,我们可以知道该时间的含义为:block cleanout 。
该事件需要在系统级设置,重启数据库后生效:
SQL> alter system set event="10203 trace name context forever" scope=spfile;
System altered.
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down
.
SQL> startup
ORACLE instance started.
Total System Global Area 126948772 bytes
Fixed Size 452004 bytes
Variable Size 92274688 bytes
Database Buffers 33554432 bytes
Redo Buffers 667648 bytes
Database mounted.
Database opened.
SQL> show parameter event
NAME TYPE VALUE
------------------------------------ ----------- --------------------------------
event string 10203 trace name context forever
做的测试如下:
sys@TEST(192.168.1.117)> conn paul/paul
已连接。
sys@TEST(192.168.1.117)> update t set a=100 where a=4;
已更新 1 行。
已用时间: 00: 00: 00.00
sys@TEST(192.168.1.117)> alter session set events 'immediate trace name flush_cache level 1'; --强制刷新输出到硬盘上
会话已更改。
已用时间: 00: 00: 00.00
sys@TEST(192.168.1.117)> alter system dump datafile 6 block 13;
系统已更改。
sys@TEST(192.168.1.117)> commit; --事物提交
提交完成。
已用时间: 00: 00: 00.00
sys@TEST(192.168.1.117)> alter system dump datafile 6 block 13;
系统已更改。
已用时间: 00: 00: 00.03
sys@TEST(192.168.1.117)> analyze table t compute statistics; --分析表,执行块清除
表已分析。
已用时间: 00: 00: 00.04
sys@TEST(192.168.1.117)> alter system dump datafile 6 block 13;
系统已更改。
已用时间: 00: 00: 00.03
sys@TEST(192.168.1.117)>
现在我们看下这三次dump出来的数据文件
第一次: update 这条语句 事物没提交
*** 2007-09-14 09:01:01.077
Start dump data blocks tsn: 6 file#: 6 minblk 13 maxblk 13
buffer tsn: 6 rdba: 0x0180000d (6/13)
scn: 0x0000.003d600a seq: 0x01 flg: 0x04 tail: 0x600a0601
frmt: 0x02 chkval: 0x4248 type: 0x06=trans data
Block header dump: 0x0180000d
Object id on Block? Y
seg/obj: 0x1a2d csc: 0x00.3d5efb itc: 2 flg: E typ: 1 - DATA
brn: 0 bdba: 0x1800009 ver: 0x01
inc: 0 exflg: 0
Itl Xid Uba Flag Lck Scn/Fsc
0x01 0x0004.012.00000069 0x0080003c.0055.19 C--- 0 scn 0x0000.003d5ef2
0x02 0x0005.00b.00000066 0x00800021.001c.03 ---- 1 fsc 0x0000.00000000 --这里表示事物没提交 更新到一条记录
data_block_dump,data header at 0x35b1064
===============
tsiz: 0x1f98
hsiz: 0x1c
pbl: 0x035b1064
bdba: 0x0180000d
76543210
flag=--------
ntab=1
nrow=5
frre=-1
fsbo=0x1c
fseo=0x1f74
avsp=0x1f4f
tosp=0x1f4f
0xe:pti[0] nrow=5 ffs=0
0x12:pri[0] ffs=0x1f92
0x14:pri[1] ffs=0x1f8c
0x16:pri[2] ffs=0x1f80
0x18:pri[3] ffs=0x1f7a
0x1a:pri[4] ffs=0x1f74
block_row_dump:
tab 0, row 0, @0x1f92
tl: 6 fb: --H-FL-- lb: 0x0 cc: 1
col 0: [ 2] c2 02
tab 0, row 1, @0x1f8c
tl: 6 fb: --H-FL-- lb: 0x0 cc: 1
col 0: [ 2] c2 02
tab 0, row 2, @0x1f80
tl: 6 fb: --H-FL-- lb: 0x2 cc: 1
col 0: [ 2] c2 02
tab 0, row 3, @0x1f7a
tl: 6 fb: --H-FL-- lb: 0x0 cc: 1
col 0: [ 2] c1 06
tab 0, row 4, @0x1f74
tl: 6 fb: --H-FL-- lb: 0x0 cc: 1
col 0: [ 2] c1 07
end_of_block_dump
End dump data blocks tsn: 6 file#: 6 minblk 13 maxblk 13
第二次 commit 语句
*** 2007-09-14 09:02:09.448
Start dump data blocks tsn: 6 file#: 6 minblk 13 maxblk 13
buffer tsn: 6 rdba: 0x0180000d (6/13)
scn: 0x0000.003d600a seq: 0x01 flg: 0x04 tail: 0x600a0601
frmt: 0x02 chkval: 0x4248 type: 0x06=trans data
Block header dump: 0x0180000d
Object id on Block? Y
seg/obj: 0x1a2d csc: 0x00.3d5efb itc: 2 flg: E typ: 1 - DATA
brn: 0 bdba: 0x1800009 ver: 0x01
inc: 0 exflg: 0
Itl Xid Uba Flag Lck Scn/Fsc
0x01 0x0004.012.00000069 0x0080003c.0055.19 C--- 0 scn 0x0000.003d5ef2
0x02 0x0005.00b.00000066 0x00800021.001c.03 ---- 1 fsc 0x0000.00000000 发现还是未改变状态,还是未提交,这是因为数据已经刷新到硬盘上,需要进行块清除,才能置锁定标志
data_block_dump,data header at 0x35b1064
===============
tsiz: 0x1f98
hsiz: 0x1c
pbl: 0x035b1064
bdba: 0x0180000d
76543210
flag=--------
ntab=1
nrow=5
frre=-1
fsbo=0x1c
fseo=0x1f74
avsp=0x1f4f
tosp=0x1f4f
0xe:pti[0] nrow=5 ffs=0
0x12:pri[0] ffs=0x1f92
0x14:pri[1] ffs=0x1f8c
0x16:pri[2] ffs=0x1f80
0x18:pri[3] ffs=0x1f7a
0x1a:pri[4] ffs=0x1f74
block_row_dump:
tab 0, row 0, @0x1f92
tl: 6 fb: --H-FL-- lb: 0x0 cc: 1
col 0: [ 2] c2 02
tab 0, row 1, @0x1f8c
tl: 6 fb: --H-FL-- lb: 0x0 cc: 1
col 0: [ 2] c2 02
tab 0, row 2, @0x1f80
tl: 6 fb: --H-FL-- lb: 0x2 cc: 1
col 0: [ 2] c2 02
tab 0, row 3, @0x1f7a
tl: 6 fb: --H-FL-- lb: 0x0 cc: 1
col 0: [ 2] c1 06
tab 0, row 4, @0x1f74
tl: 6 fb: --H-FL-- lb: 0x0 cc: 1
col 0: [ 2] c1 07
end_of_block_dump
End dump data blocks tsn: 6 file#: 6 minblk 13 maxblk 13
第三次.分析数据,执行块清除
*** 2007-09-14 09:03:10.258
这些就是跟踪的块清除操作
Begin cleaning out block ...
Found all committed transactions
Block cleanout record, scn: 0xffff.ffffffff ver: 0x01 opt: 0x01, entries follow...
itli: 2 flg: 2 scn: 0x0000.003d602a
Block cleanout under the cache...
Block cleanout record, scn: 0x0000.003d6046 ver: 0x01 opt: 0x01, entries follow...
itli: 2 flg: 2 scn: 0x0000.003d602a
... clean out dump complete.
Begin cleaning out block ...
Found all committed transactions
Block cleanout record, scn: 0xffff.ffffffff ver: 0x01 opt: 0x02, entries follow...
itli: 2 flg: 2 scn: 0x0000.003d104d
Block cleanout under the cache...
Block cleanout record, scn: 0x0000.003d6047 ver: 0x01 opt: 0x02, entries follow...
itli: 2 flg: 2 scn: 0x0000.003d104d
... clean out dump complete.
Start dump data blocks tsn: 6 file#: 6 minblk 13 maxblk 13
buffer tsn: 6 rdba: 0x0180000d (6/13)
scn: 0x0000.003d6046 seq: 0x01 flg: 0x00 tail: 0x60460601
frmt: 0x02 chkval: 0x0000 type: 0x06=trans data
Block header dump: 0x0180000d
Object id on Block? Y
seg/obj: 0x1a2d csc: 0x00.3d6046 itc: 2 flg: E typ: 1 - DATA
brn: 0 bdba: 0x1800009 ver: 0x01
inc: 0 exflg: 0
Itl Xid Uba Flag Lck Scn/Fsc
0x01 0x0004.012.00000069 0x0080003c.0055.19 C--- 0 scn 0x0000.003d5ef2
0x02 0x0005.00b.00000066 0x00800021.001c.03 C--- 0 scn 0x0000.003d602a 状态已经改边,变成C提交状态
data_block_dump,data header at 0x35b1064
===============
tsiz: 0x1f98
hsiz: 0x1c
pbl: 0x035b1064
bdba: 0x0180000d
76543210
flag=--------
ntab=1
nrow=5
frre=-1
fsbo=0x1c
fseo=0x1f74
avsp=0x1f4f
tosp=0x1f4f
0xe:pti[0] nrow=5 ffs=0
0x12:pri[0] ffs=0x1f92
0x14:pri[1] ffs=0x1f8c
0x16:pri[2] ffs=0x1f80
0x18:pri[3] ffs=0x1f7a
0x1a:pri[4] ffs=0x1f74
block_row_dump:
tab 0, row 0, @0x1f92
tl: 6 fb: --H-FL-- lb: 0x0 cc: 1
col 0: [ 2] c2 02
tab 0, row 1, @0x1f8c
tl: 6 fb: --H-FL-- lb: 0x0 cc: 1
col 0: [ 2] c2 02
tab 0, row 2, @0x1f80
tl: 6 fb: --H-FL-- lb: 0x0 cc: 1
col 0: [ 2] c2 02
tab 0, row 3, @0x1f7a
tl: 6 fb: --H-FL-- lb: 0x0 cc: 1
col 0: [ 2] c1 06
tab 0, row 4, @0x1f74
tl: 6 fb: --H-FL-- lb: 0x0 cc: 1
col 0: [ 2] c1 07
end_of_block_dump
End dump data blocks tsn: 6 file#: 6 minblk 13 maxblk 13