設定會話TRACE的方法(一)

yangtingkun發表於2011-06-26

很多時候需要設定會話的SQL_TRACE,以便於分析,簡單總結一下設定的方法和適用的情況。

這一篇介紹設定當前會話SQL_TRACE的方法。

DBMS_SESSION包小議(五):http://yangtingkun.itpub.net/post/468/498559

 

 

最顯而易見的方法設定SQL_TRACE引數:

SQL> ALTER SESSION SET SQL_TRACE = TRUE;

會話已更改。

SQL> ALTER SESSION SET SQL_TRACE = FALSE;

會話已更改。

在任何版本都可以適用,可以設定會話級和例項級的SQL_TRACE,缺點只能設定當前會話,如果想開啟其他會話的SQL_TRACE,需要建立登入觸發器,另外只能開啟1TRACE方式,也就是不包含等待事件和繫結變數資訊。

第二種方式DBMS_SESSION包:

SQL> EXEC DBMS_SESSION.SET_SQL_TRACE(TRUE)

PL/SQL 過程已成功完成。

SQL> EXEC DBMS_SESSION.SET_SQL_TRACE(FALSE)

PL/SQL 過程已成功完成。

這種方式等同於ALTER SESSION SET SQL_TRACE,除了不能設定例項級的SQL_TRACE,其他優缺點一致,不過DBMS_SESSION還提供了另外級別的TRACE功能:

SQL> EXEC DBMS_SESSION.SESSION_TRACE_ENABLE(TRUE, TRUE)

PL/SQL 過程已成功完成。

SQL> EXEC DBMS_SESSION.SESSION_TRACE_DISABLE

PL/SQL 過程已成功完成。

適用這個過程可以設定包含等待事件和繫結變數的SQL_TRACE,但是這是過程是10g才開始提供的,雖然9i已經存在DBMS_SESSION包,但是沒有SESSION_TRACE_ENABLE過程:

SQL> select * from v$version;

BANNER
----------------------------------------------------------------
Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production
PL/SQL Release 9.2.0.4.0 - Production
CORE 9.2.0.3.0 Production
TNS for Linux: Version 9.2.0.4.0 - Production
NLSRTL Version 9.2.0.4.0 - Production

SQL> exec dbms_session.session_trace_enable(true, true)
BEGIN dbms_session.session_trace_enable(true, true); END;

*
ERROR at line 1:
ORA-06550:
1 , 20 :
PLS-00302:
必須說明 'SESSION_TRACE_ENABLE' 元件
ORA-06550:
1 , 7 :
PL/SQL: Statement ignored


SQL> exec dbms_session.set_sql_trace(true)

PL/SQL procedure successfully completed.

SQL> exec dbms_session.set_sql_trace(false)

PL/SQL procedure successfully completed.

對於9i而言,設定當前會話的SQL_TRACE,且包含繫結變數和等待事件的方法,就只有使用EVENT

SQL> ALTER SESSION SET EVENTS '10046 TRACE NAME CONTEXT FOREVER, LEVEL 12';

會話已更改。

SQL> ALTER SESSION SET EVENTS '10046 TRACE NAME CONTEXT OFF';

會話已更改。

SQL> ALTER SESSION SET EVENTS = '10046 TRACE NAME CONTEXT FOREVER, LEVEL 12';

會話已更改。

SQL> ALTER SESSION SET EVENTS = '10046 TRACE NAME CONTEXT OFF';

會話已更改。

設定EVENTS的語法可以省略掉等號,因此上面兩種寫法都可以。

這種方式比較隱晦,因為EVENTS似乎和SQL_TRACE沒有什麼關係,而對於熟悉的DBA而言,EVENTS 10046可能是所有事件中應用最頻繁的,而這種方法使用頻率甚至會超過第一種SQL_TRACE的方法。同樣這種方法對於所有的版本都有效。

 

 

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

相關文章