• 博客访问: 9685614
  • 博文数量: 2744
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-29 09:23
个人简介

暂无介绍

ITPUB论坛APP

ITPUB论坛APP



APP发帖 享双倍积分

文章分类

全部博文(2744)

文章存档

2013年(30)

2012年(326)

2011年(365)

2010年(349)

2009年(370)

2008年(358)

2007年(352)

2006年(366)

2005年(178)

2004年(50)

微信关注

IT168企业级官微



微信号:IT168qiye



系统架构师大会



微信号:SACC2013

订阅
热词专题

分类: Linux

很多时候需要设置会话的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的方法。同样这种方法对于所有的版本都有效。

 

 

阅读(2502) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
请登录后评论。

登录 注册