使用dbms_monitor.session_trace_enable跟蹤一個會話

記錄每一次錯誤發表於2018-12-21

10046事件的 4個級別

10046 事件按照收集資訊內容,可以分成4個級別:
Level 1: 等同於SQL_TRACE 的功能
Level 4: 在Level 1的基礎上增加收集繫結變數的資訊
Level 8: 在Level 1 的基礎上增加等待事件的資訊

Level 12:等同於Level 4+Level 8, 即同時收集繫結變數資訊和等待事件資訊。

二.

以下的 PL/SQL為ID為122。序列號為6734的會話開啟第8級的SQL跟蹤:

begin

  dbms_monitor.session_trace_enable(session_id => 122,

                                    serial_num => 6734,

                                    waits      => true,

                                    binds      => false);

end;

session_id
session標識。相應v$session檢視中的SID列。以下是獲取當前會話id的方法:

S elect sid  from  v$version;

serial_num
相應 v$session檢視中的SERIAL#列,因為SID會重用。當SID被重用時,SERIAL#新增。獲取方法例如以下: select serial# from v$session

waits
相應 v$session檢視中的SQL_TRACE_WAITS,表示等待事件跟蹤是否被啟用,默覺得true。

binds
相應 v$session檢視中的SQL_TRACE_BINDS,表示繫結跟蹤是否被啟用。預設false。

當執行成功後。 v$session檢視中的SQL_TRACE被改動為ENABLED,SQL_TRACE_WAITS和SQL_TRACE_BINDS為你設定的相應值。
以下的 PL/SQL用於關閉SQL跟蹤:

1.begin

  dbms_monitor.session_trace_disable(session_id => 122, serial_num => 6734);

end;

2 修改trace檔案的檔名:

alter session set tracefile_identifier='10046';  

3. 使用

select tracefile from v$process where addr=(select paddr from v$session where sid=(select distinct sid from v$mystat));

確定 trace檔案。

4. 使用工具轉換成 txt格式

在作業系統中執行:  tkprof trace檔案的名字(例如:RBKSAFARI_ora_30598.trc) new.txt

使用dbms_monitor.session_trace_enable 要注意一點的是,跟蹤的SQL語句必須是當前例項,不能跨例項跟蹤會話。

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

相關文章