在oracle中跟蹤會話執行語句的幾種方法
生成sql trace可以有以下幾種方式:
1、引數設定:非常傳統的方法。
系統級別:
引數檔案中指定: sql_trace=true
或
SQL> alter system set sql_trace=true;
注意:系統級別啟用sql_trace,會產生大量trace檔案,很容易耗盡磁碟空間,因此一般設定會話級別,並且及時關閉。
會話級別:
SQL> alter session set sql_trace=true;
SQL> 執行sql
SQL> alter session set sql_trace=false;
啟用跟蹤後,跟蹤檔案儲存在user_dump_dest下
可以使用下面的查詢來找到生成的跟蹤檔案
SQL> select
2 d.value||'/'||lower(rtrim(i.instance,
3 chr(0)))||'_ora_'||p.spid||'.trc' trace_file_name
4 from ( select p.spid
5 from v$mystat m,
6 v$session s,v$process p
7 where m.statistic# = 1 and s.sid = m.sid and p.addr = s.paddr) p,
8 ( select t.instance from v$thread t,v$parameter v
9 where v.name = 'thread' and
10 (v.value = 0 or t.thread# = to_number(v.value))) i,
11 ( select value from v$parameter
12 where name = 'user_dump_dest') d
13 /
TRACE_FILE_NAME
--------------------------------------------------------------------------------
/oracle/admin/RLZY/udump/rlzy_ora_721532.trc
也可以給要生成的跟蹤檔案指定識別符號來讓你更容易的找到跟檔案
SQL> alter session set tracefile_identifier='jingyong';
2、使用10046事件:
10046事件級別:
Lv0 - 禁用sql_trace,等價於sql_trace=false
Lv1 - 啟用標準的sql_trace功能,等價於sql_trace=true
Lv4 - Level 1 + 繫結變數值(bind values)
Lv8 - Level 1 + 等待事件跟蹤(waits)
Lv12 - Level 1 + Level 4 + Level 8
全域性設定:
引數檔案中指定: event="10046 trace name context forever,level 12"
或者
SQL> alter system set events '10046 trace name context forever, level 12';
SQL> alter system set events '10046 trace name context off';
注意:系統級別啟用sql_trace,會產生大量trace檔案,很容易耗盡磁碟空間,因此一般設定會話級別,並且及時關閉。
當前session設定:
SQL> alter session set events '10046 trace name context forever, level 12';
SQL> 執行sql
SQL> alter session set events '10046 trace name context off';
3、dbms_session包:只能跟蹤當前會話,不能指定會話。
跟蹤當前會話:
SQL> exec dbms_session.set_sql_trace(true);
SQL> 執行sql
SQL> exec dbms_session.set_sql_trace(false);
dbms_session.set_sql_trace相當於alter session set sql_trace,從生成的trace檔案可以明確地看
alter session set sql_trace語句。
使用dbms_session.session_trace_enable過程,不僅可以看到等待事件資訊還可以看到繫結變數資訊,
相當於alter session set events '10046 trace name context forever, level 12';語句從生成的trace檔案可以確認。
SQL> exec dbms_session.session_trace_enable(waits=>true,binds=>true);
SQL> 執行sql
SQL> exec dbms_session.session_trace_enable();
4、dbms_support包:不應該使用這種方法,非官方支援。
系統預設沒有安裝這個包,可以手動執行$ORACLE_HOME/rdbms/admin/bmssupp.sql指令碼來建立該包
跟蹤當前會話:
SQL> exec dbms_support.start_trace
SQL> 執行sql
SQL> exec dbms_support.stop_trace
跟蹤其他會話:等待事件+繫結變數,相當於level 12的10046事件。
SQL> select sid,serial#,username from v$session where ...;
SQL> exec dbms_support.start_trace_in_session(sid=>sid,serial=>serial#,waits=>true,binds=>true);
SQL> exec dbms_support.stop_trace_in_session(sid=>sid,serial=>serial#);
5、dbms_system包:
跟蹤其他會話:
使用dbms_system.set_ev設定10046事件
SQL> select sid,serial#,username from v$session where ...;
SQL> exec dbms_system.set_ev(sid,serial#,10046,12,'');
SQL> exec dbms_system.set_ev(sid,serial#,10046,0,'');
但經過測試在10g中使用級別為8,12的跟蹤並沒有在跟蹤檔案中生產等待事件資訊
6、dbms_monitor包:10g提供,功能非常強大。可在模組級別、動作級別、客戶端級別、資料庫級別、會話級別進行跟蹤。oracle官方支援。
跟蹤當前會話:
SQL> exec dbms_monitor.session_trace_enable;
SQL> 執行sql
SQL> exec dbms_monitor.session_trace_disable;
跟蹤其他會話:
SQL> exec dbms_monitor.session_trace_enable(session_id=>sid,serial_num=>serial#,waits=>true,binds=>true);
SQL> exec dbms_monitor.session_trace_disable(session_id=>sid,serial_num=>serial#);
7、oradebug
這是sqlplus的工具,需要提供OSPID或者oracle PID。
跟蹤當前會話:
SQL> oradebug setmypid;
Statement processed.
SQL> oradebug unlimit;
Statement processed.
SQL> oradebug event 10046 trace name context forever,level 12;
Statement processed.
SQL> 執行sql
SQL> oradebug tracefile_name
SQL> oradebug event 10046 trace name context off;
Statement processed.
跟蹤其他會話:
SQL> select spid,pid2 from v$process
2 where addr in (select paddr from v$session where sid=(select distinct sid from v$mystat));
SPID PID
------------ ----------
1457 313
SQL> oradebug setospid 1457;
Statement processed.
或者
SQL> oradebug setorapid 313;
Statement processed.
SQL> oradebug unlimit;
Statement processed.
SQL> oradebug event 10046 trace name context forever,level 12;
Statement processed.
SQL> oradebug tracefile_name
SQL> oradebug event 10046 trace name context off;
Statement processed.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31444259/viewspace-2154264/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle中跟蹤sql執行計劃的方法OracleSQL
- Oracle執行語句跟蹤 使用sql trace實現語句追蹤OracleSQL
- mysql如何跟蹤執行的sql語句MySql
- oracle rac中讓sql語句在指定的節點執行的方法OracleSQL
- -t【Oracle-故障管理】-Trace跟蹤會話和會話執行慢故障分析Oracle會話
- Oracle 獲取執行計劃的幾種方法Oracle
- 【執行計劃】Oracle獲取執行計劃的幾種方法Oracle
- Oracle跟蹤會話Oracle會話
- linux strace追蹤mysql執行語句LinuxMySql
- 追蹤應用程式所執行的sql語句SQL
- 在Oracle里加快SQL執行的三種方法OracleSQL
- 會話的跟蹤以及執行計劃的獲取會話
- oracle session(會話) 跟蹤OracleSession會話
- 執行計劃幾種方法
- Oracle SQL 語句的執行過程OracleSQL
- 查詢Oracle正在執行的sql語句及執行該語句的使用者OracleSQL
- Linux 讓程式在後臺可靠執行的幾種方法Linux
- 在Oracle里加快SQL執行的三種方法(轉)OracleSQL
- Ubuntu中跟蹤多個時區的簡捷方法Ubuntu
- 四種會話追蹤技術會話
- 後臺執行SQL語句(oracle)SQLOracle
- Oracle SQL語句執行步驟OracleSQL
- 快速執行大量 insert 語句的方法
- 查詢Oracle正在執行的SQL語句OracleSQL
- 理解oracle執行sql語句的過程OracleSQL
- 記錄ORACLE語句的執行時間Oracle
- Linux 技巧:讓程式在後臺可靠執行的幾種方法Linux
- Linux 下讓程式在後臺可靠執行的幾種方法Linux
- 查詢Oracle正在執行和執行過的SQL語句OracleSQL
- 在Oracle裡提高SQL執行效率的三種方法NQOracleSQL
- 在事務中執行sql語句SQL
- 在nhibernate中執行SQL語句SQL
- oracle使用profiler分析語句執行效率Oracle
- Oracle動態執行語句(Execute Immediate)Oracle
- java連線oracle執行sql語句JavaOracleSQL
- ThinkPHP 列印 sql 語句的幾種方式PHPSQL
- Shell指令碼中執行sql語句操作MySQL資料庫的幾個方法指令碼MySql資料庫
- 在 Visual C# .NET 中跟蹤和除錯C#除錯