ORACLE 10046 設定跟蹤事件後無跟蹤檔案

lnwxzyp發表於2010-09-30
      如果你也有過找到一篇垃圾文章誤導你的經歷的話,你肯定能理解我鬱悶的心情,我今天就在網上google到了一篇垃圾文章,寫的還挺詳細,事件等級啊各種跟蹤用的dbms包啊應有盡有,但是根據那篇文章設定了10046事件,結果死活也找不到寫到 $ORACLE_BASE/admin/$ORACLE_SID/udump下的檔案,百思不得其解,最後看了一下10046網上以訛傳訛的文章還挺多。而且網上通過關鍵字檢視,很少發現有遇到跟我一樣的,最後在eygle的網站上發現了一篇文章,介紹10046的,文章裡面的評論就說設定了10046事件後沒有發現跟蹤檔案,仔細看了一下E大師的文章,才知道搞錯了。
      執行當前會話的跟蹤相信都不會搞錯,關鍵就是跟蹤其他會話,要跟蹤其他會話 首先還是要查詢到
V$SESSION的SID和SERIAL#然後 給這個會話設定跟蹤等級,(具體的大家google就好,我這裡只是告訴大家不要犯像我一樣的錯誤)
      exec dbms_system.set_ev(sid,serial#,10046,12,'');
我犯得錯誤就是 執行了這個包之後 以為就是開始跟蹤會話了,然後執行
exec dbms_system.set_ev(sid,serial#,10046,0,''); 以為就結束了 然後用語句
select
  d.value||'/'||lower(rtrim(i.instance, chr(0)))||'_ora_'||p.spid||'.trc' trace_file_name
from
  ( select p.spid
    from sys.v$mystat m,sys.v$session s,sys.v$process p
    where m.statistic# = 1 and s.sid = m.sid and p.addr = s.paddr) p,
  ( select t.instance from sys.v$thread  t,sys.v$parameter  v
    where v.name = 'thread' and (v.value = 0 or t.thread# = to_number(v.value))) i,
  ( select value from sys.v$parameter where name = 'user_dump_dest') d
查出來一個檔名 就傻不拉唧的在UDUMP資料夾裡面找呀找的,結果怎麼可能找的到嘛。

執行了這一步以後 只是對其他的會話設定了跟蹤事件的等級,並非開始跟蹤,開始跟蹤要執行
      exec dbms_system.set_sql_trace_in_session(sid,serial#,true);

結束
     exec dbms_system.set_sql_trace_in_session(sid,serial#,false);

不過要注意的是 執行了exec dbms_system.set_sql_trace_in_session(sid,serial#,true);收集一段時間之後一定要記得執行結束的false 不然的話 udump裡面你的那個檔案可能會讓你的oracle安裝目錄達到100%的磁碟佔用率,這要是在生產庫的話,你就等著降級罰俸吧 :)

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

相關文章