使用10203事件來跟蹤oracle塊清除

paulyibinyi發表於2007-12-12
快清除的概念,在事物提交前,資料已經寫到硬碟上,但還未清楚鎖相關資訊,需要下次訪問該塊時才進行清除
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

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7199859/viewspace-476/,如需轉載,請註明出處,否則將追究法律責任。

相關文章