如何跟蹤某個session的SQL?

1 oracle自帶的sql trace程序能夠跟蹤本地sessionsql

    sys: alter system set sql_trace = true;對全部會話跟蹤 數據庫

    schema: alter session set sql_trace = true; 對某個session 會話跟蹤sql語句後端

     用tkprof 來格式化跟蹤文件輸出session

    tkprof 輸出內容包括 1 sql 語句 2統計信息 3explain table 執行計劃oracle

 

2 基於DBMS_MONITOR包來跟蹤會話,這種狀況通常是 ide

經過該程序包能夠跟蹤從客戶機到中間層、再到後端數據庫的任何用戶會話,從而能夠 較爲容易的標識建立大量工做量的特定用戶。
會話:基於會話 ID 和序列號 DBMS_MONITOR.session_trace_enable(sid,serial#,true);
                         DBMS_MONITOR.session_trace_enable(sid,serial#,false);
客戶端標識符:容許跨越多個會話設置跟蹤,基於登陸 ID 指定終端用戶。
              客戶端設置的參數: DBMS_SESSION.SET_IDENTIFIER 過程設置該值
              運行語句:dbms_monitor.client_id_trace_enable('identifier',true,false);
                       dbms_monitor.client_id_trace_disable('identifier');
實例:基於實例名指定給定的實例
              dbms_monitor.database_trace_enable(instance_name=>'orcl');
服務名:指定一組相關的應用程序,使用 DBMS_SERVICE.CREATE_SERVICE 過程設置該值,
dbms_monitor.serv_mod_act_trace_enable(service_name=>'orcl1',module_name=>'salary_update',action_name=>'insert_item');
dbms_monitor.serv_mod_act_trace_disable(service_name=>'orcl1',module_name=>'salary_update',action_name=>'insert_item');
模塊名:開發人員在其應用程序代碼中使用 DBMS_APPLICATION_INFO.SET_MODULE 程設置該值
操做名:開發人員在其應用程序中使用 DBMS_APPLICATION_INFO.SET_ACTION 過程設 置該值  trcsess提取跟蹤文件,能夠基於會話ID或者模塊名稱,具體參考trcsess幫助usage

 這個很經常使用spa

3  DBMS_system包也能夠跟蹤系統中其餘session的sql執行語句xml

 

  dbms_system.set_sql_trace_in_session(sid,serial#,true);進程

  dbms_system.set_sql_trace(true)跟蹤本地session事件

 

4 使用10046事件來實現

運用10046進程sql跟蹤
全局或者session範圍
level 1
level 4 : 1+bind variable
level 8 : 1+wait events
level 12 : 1 +4+8
tkprof 的時候 4,8,12的信息被忽略
全局設定,修改initial文件
event='10046 trace name context forever,level12'
alter system set events
session設定
alter session set events='10046 trace name context forever,level 8';
alter session set events='10046 trace name context off';

 

以上4中session跟蹤方法,經過dbms_monitor,和dbms_system能夠用來跟蹤其餘指定session的sql,其餘兩個方法都是本地

session或者system級別的跟蹤