利用10046事件跟蹤會話的方法

若是發現某進程比較消耗資源,但變更頻繁,而且想知道該進程在執行什麼SQL,那麼能夠使用會話跟蹤來找到該進程執行的SQL:sql

跟蹤以前請設置timed_statistics=true及max_dump_file_size=unlimited,根據操做系統進程的SPID找到上述的ORACLE內部會話的sidserial#,能夠使用以下sql:session

SELECT A.sid,A.Machine,A.Terminal,A.Program FROM V$SESSION A, V$PROCESS B WHERE A.PAddr = B.Addr AND B.spid = '&spid';oracle

執行跟蹤:操作系統

sql> execute dbms_system.set_sql_trace_in_session(sid,serial#,true);debug

而10046事件跟蹤是上述會話跟蹤的加強版本,它比上述的會話跟蹤可以獲得更爲詳細的內容,推薦使用8級進行跟蹤。10046等待事件有1,4,8,12四種等級,8級會記錄等待事件,12級在記錄等待事件的同時還會捕捉綁定變量的值。進程

跟蹤本身所在的進程的方法:事件

sql> alter session set events '10046 trace name context forever, level8';資源

sql> alter session set events '10046 trace name context off';get

跟蹤其餘用戶所在的進程的方法,使用ORACLE級別的session號:it

sql> exec dbms_system.set_ev(sid,serial#,10046,8,'username');

sql> exec dbms_system.set_ev(sid,serial#,10046,0,'username');

或者使用操做系統進程號:

sql> oradebug setospid <SPID>

sql> oradebug unlimit

sql> oradebug event 10046 trace name context forever, level 8

跟蹤本身,也能夠使用:

alter session set sql_trace=true;

另外:

提取sid,serial#的語句,在下面加上serial#便可:

SELECT A.sid,A.Machine,A.Terminal,A.Program FROM V$SESSION A, V$PROCESS B WHERE A.PAddr = B.Addr AND B.spid = '&spid';

爲:

SELECT A.sid,a.serial#, A.Machine,A.Terminal,A.Program FROM V$SESSION A, V$PROCESS B WHERE A.PAddr = B.Addr AND B.spid = '&spid';

相關文章
相關標籤/搜索