设置会话TRACE的方法(一)

很多时候需要设置会话的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,需要建立登录触发器,另外只能开启1级TRACE方式,也就是不包含等待事件和绑定变量信息。

第二种方式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的方法。同样这种方法对于所有的版本都有效。

原文地址:https://www.cnblogs.com/tracy/p/2092149.html