oracle set events

wmlm發表於2008-11-11

-- set events 能夠產生trace file 常用的event 有哪些呢?
ORALCE中的診斷事件,用來產生trace file,對資料庫進行診斷。
這些Event types包括三大類:Dump eventsTrace eventsChange the behaviour
設定一個事件有三種途徑:
through the event init parameter
alter session set event
oradebug(orambx on VMS)

在alter system 時可以dump datafile
如:
alter system dump datafile 5 block min 50 block max 55;
關於 dump one ore more blocks 參考《dump_datafile.sql》
比較常用的事件有10046 和 10053.

[@more@]

-- 如何查詢當前會話的trace file?

select
u_dump.value || '/' ||
db_name.value || '_ora_' ||
v$process.spid ||
nvl2(v$process.traceid, '_' || v$process.traceid, null )
|| '.trc' "Trace File"
from
v$parameter u_dump
cross join v$parameter db_name
cross join v$process
join v$session
on v$process.addr = v$session.paddr
where
u_dump.name = 'user_dump_dest' and
db_name.name = 'db_name' and
v$session.audsid=sys_context('userenv','sessionid');

-- 如何設定10046事件?
10046事件用來跟蹤SQL語句,比較常用,功能類似於sql_trace=true ;
其level引數含義如下:
1: Standard SQL tracing
4: Level 1 + tracing bind variables
8: Level 1 + tracing wait events
12: Level 4 + Level 8 (SQL tracing, bind vars and wait events)
使用例子:
alter session set events '10046 trace name context forever, level 4';
其結果是在udump目錄下產生一個日誌檔案,從日誌檔案中可以看出SQL bind variable的情況。

oracle10g中增加了一個檢視可以更方便地檢視bind variable. v$sql_bind_capture

結束事件
SQL> alter session set events '10046 trace name context off';


-- 如何使用10053 事件?
SQL> alter session set events '10053 trace name context forever, level 1';

會話已更改。

-- 執行一些能產生硬解析的語句
SQL> select count(1) from user_tables where table_name like '%DYHSB%';

COUNT(1)
----------
13

alter session set events '10053 trace name context off' ;

-- 到udump目錄下找產生的日誌檔案,如果沒有硬解析發生,就不會產生日誌

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

相關文章