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

  • 相关阅读:
    【算法工程师/专家(用户行为分析方向),阿里云计算有限公司】前程无忧官方招聘网站
    linux文件设备与I/O: dup和dup2函数
    【高级网页分析工程师,360安全卫士】前程无忧官方招聘网站
    分享:gzip头部格式
    C调试时常用的宏
    分享:Waterfox 18.0.1 发布,64 位的 Firefox
    开发人员应该对IIS理论层的知识了解的多一些~第三讲 网页从IIS端到客户端浏览器经历的阶段
    开发人员应该对IIS理论层的知识了解的多一些~第一讲 什么是Http?
    开发人员应该对IIS理论层的知识了解的多一些~第二讲 静态网页与动态网页如何被解释执行的
    Javascript基础与面向对象基础~目录
  • 原文地址:https://www.cnblogs.com/tracy/p/2092149.html
Copyright © 2020-2023  润新知