ZT 自動10046 trace指令碼

asword發表於2009-02-01

我在日常工作中經常需要用10046跟蹤一些程式,為了方便,寫了一個可以方便檢視trace的小指令碼。

sql

X
suk@oracle9i> @end_trace--結束trace,此時會自動開啟格式化後的trace檔案



如果是
linux,則在進入sqlplus前需要設定:export EDITOR=vi
或者在$ORACLE_HOME/sqlplus/admin/glogin.sql中加入:
DEFINE _EDITOR = vi
---------------------------------------------------------------------------------
附:以下是事件的有效trace級別:
Level 0 tracing被關閉。這相當於設定sql_trace=false。
Level 1 跟蹤sql語句,包括解析、執行、提取、提交和回滾等(SQL_TRACE=TRUE)。這是預設級別。
Level 4 SQL trace資訊加繫結變數值(包括變數的詳細資訊)。
Level 8 SQL trace資訊加等待事件資訊。
Level 12 SQL trace 資訊,等待事件資訊,和繫結變數值。
2、獲取跟蹤檔案
你能使用trace事件10046來跟蹤使用者會話或
Oracle後臺程式。
會話位置:USER_DUMP_DEST
後臺位置:BACKGROUND_DUMP_DEST
sql:
select d.value || '/' || lower(rtrim(i.instance, chr(0))) || '_ora_' ||
p.spid || '.trc' trace_file_name
from (select p.spid
from v$mystat m, v$session s, v$process p
where m.statistic# = 1
and s.sid = m.sid
and p.addr = s.paddr) p,
(select t.instance
from v$thread t, v$parameter v
where v.name = 'thread'
and (v.value = 0 or t.thread# = to_number(v.value))) i,
(select value from v$parameter where name = 'user_dump_dest') d
注意:TRACE將消耗相當的系統資源,因此我們在使用TRACE的時候應當慎重。對於正式的系統,應當只在必要的時候進行TRACE操作,並且應當及時關閉。


begin_trace:
---------------------------------------------------------
-- run in SQL*Plus --

set termout off
set heading off
set verify off
set feedback off
alter session set timed_statistics=true;
alter session set events '10046 trace name context forever,level 12';
---------------------------------------------------------


end_trace:
--------------------------------------------------------
-- run in SQL*Plus --

alter session set events '10046 trace name context off';
column trace_file_name new_val f
column tk_name new_val tk
select
d.value||b.is_win||lower(rtrim(i.instance, chr(0)))||'_ora_'||p.spid||'.trc' trace_file_name ,
d.value||b.is_win||'tk.prf' tk_name
from
( select p.spid
from v$mystat m,v$session s,v$process p
where m.statistic# = 1 and s.sid = m.sid and p.addr = s.paddr) p,
( select t.instance from v$thread t,v$parameter v
where v.name = 'thread' and (v.value = 0 or t.thread# = to_number(v.value))) i,
( select value from v$parameter where name = 'user_dump_dest') d,
(select DECODE(count(*),0,'/','') is_win from v$version where upper(banner) like '%WINDOWS%') b;

set termout on
set heading on
set verify on
set feedback on
host tkprof &f &tk
edit &tk
--------------------------------------------------------

使用方法:

suk@oracle9i> @begin_trace --設定事件
suk@oracle9i> select * from dual; --這裡寫執行的

[@more@]

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

相關文章