溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

在oracle中跟蹤會話執(zhí)行語句的幾種方法分別是什么

發(fā)布時間:2021-11-03 16:28:34 來源:億速云 閱讀:265 作者:柒染 欄目:建站服務(wù)器

這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)在oracle中跟蹤會話執(zhí)行語句的幾種方法分別是什么,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

生成sql trace可以有以下幾種方式:

1、參數(shù)設(shè)置:非常傳統(tǒng)的方法。

系統(tǒng)級別:

參數(shù)文件中指定: sql_trace=true

SQL> alter system set sql_trace=true;

注意:系統(tǒng)級別啟用sql_trace,會產(chǎn)生大量trace文件,很容易耗盡磁盤空間,因此一般設(shè)置會話級別,并且及時關(guān)閉。

會話級別:

SQL> alter session set sql_trace=true;

SQL> 執(zhí)行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

也可以給要生成的跟蹤文件指定標(biāo)識符來讓你更容易的找到跟文件

SQL> alter session set tracefile_identifier='jingyong';

2、使用10046事件:

10046事件級別:

Lv0  - 禁用sql_trace,等價于sql_trace=false

Lv1  - 啟用標(biāo)準(zhǔn)的sql_trace功能,等價于sql_trace=true

Lv4  - Level 1 + 綁定變量值(bind values)

Lv8  - Level 1 + 等待事件跟蹤(waits)

Lv12 - Level 1 + Level 4 + Level 8

全局設(shè)定:

參數(shù)文件中指定: 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';

注意:系統(tǒng)級別啟用sql_trace,會產(chǎn)生大量trace文件,很容易耗盡磁盤空間,因此一般設(shè)置會話級別,并且及時關(guān)閉。

當(dāng)前session設(shè)定:

SQL> alter session set events '10046 trace name context forever, level 12';

SQL> 執(zhí)行sql

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

3、dbms_session包:只能跟蹤當(dāng)前會話,不能指定會話。

跟蹤當(dāng)前會話:

SQL> exec dbms_session.set_sql_trace(true);

SQL> 執(zhí)行sql

SQL> exec dbms_session.set_sql_trace(false);

dbms_session.set_sql_trace相當(dāng)于alter session set sql_trace,從生成的trace文件可以明確地看

alter session set sql_trace語句。

使用dbms_session.session_trace_enable過程,不僅可以看到等待事件信息還可以看到綁定變量信息,

相當(dāng)于alter session set events '10046 trace name context forever, level 12';語句從生成的trace文件可以確認(rèn)。

SQL> exec dbms_session.session_trace_enable(waits=>true,binds=>true);

SQL> 執(zhí)行sql

SQL> exec dbms_session.session_trace_enable(); 

4、dbms_support包:不應(yīng)該使用這種方法,非官方支持。

系統(tǒng)默認(rèn)沒有安裝這個包,可以手動執(zhí)行$ORACLE_HOME/rdbms/admin/bmssupp.sql腳本來創(chuàng)建該包

跟蹤當(dāng)前會話:

SQL> exec dbms_support.start_trace

SQL> 執(zhí)行sql

SQL> exec dbms_support.stop_trace

跟蹤其他會話:等待事件+綁定變量,相當(dāng)于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設(shè)置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,'');

但經(jīng)過測試在10g中使用級別為8,12的跟蹤并沒有在跟蹤文件中生產(chǎn)等待事件信息

6、dbms_monitor包:10g提供,功能非常強大??稍谀K級別、動作級別、客戶端級別、數(shù)據(jù)庫級別、會話級別進行跟蹤。oracle官方支持。

跟蹤當(dāng)前會話:

SQL> exec dbms_monitor.session_trace_enable;

SQL> 執(zhí)行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。

跟蹤當(dāng)前會話:

SQL> oradebug setmypid;

Statement processed.

SQL> oradebug unlimit;

Statement processed.

SQL> oradebug event 10046 trace name context forever,level 12;

Statement processed.

SQL> 執(zhí)行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.

上述就是小編為大家分享的在oracle中跟蹤會話執(zhí)行語句的幾種方法分別是什么了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI