zoukankan      html  css  js  c++  java
  • 设置会话TRACE的方法(二)

    很多时候需要设置会话的SQL_TRACE,以便于分析,简单总结一下设置的方法和适用的情况。

    这一篇介绍设置其他会话SQL_TRACE的方法。

    设置会话TRACE的方法(一):http://yangtingkun.itpub.net/post/468/519830

    Oracle10g新增DBMS_MONITOR包(一):http://yangtingkun.itpub.net/post/468/498878


    上一篇介绍的三种方法都是对当前会话生效的,但是仅靠登录触发器来实现其他会话的SQL_TRACE是不够的,有些时候一个会话是否需要TRACE在登录的时候还不能确定。

    Oracle10g中,Oracle增加了DBMS_MONITOR包,来实现其他会话的TRACE功能:

    SQL> EXEC DBMS_MONITOR.SESSION_TRACE_ENABLE(125, 1, TRUE, TRUE)

    PL/SQL 过程已成功完成。

    SQL> EXEC DBMS_MONITOR.SESSION_TRACE_DISABLE(125, 1)

    PL/SQL 过程已成功完成。

    可以通过SIDSERIAL#来设置指定会话的SQL_TRACE,同时可以指定是否包含等待和绑定变量信息。

    除了常规的SID方式外,DBMS_MONITOR还支持其他的方式:

    SQL> EXEC DBMS_MONITOR.CLIENT_ID_TRACE_ENABLE('TEST', TRUE, TRUE)

    PL/SQL 过程已成功完成。

    SQL> EXEC DBMS_MONITOR.CLIENT_ID_TRACE_DISABLE('TEST')

    PL/SQL 过程已成功完成。

    SQL> EXEC DBMS_MONITOR.SERV_MOD_ACT_TRACE_ENABLE('SERVICE', 'MODULE', 'ACTION', TRUE, TRUE)

    PL/SQL 过程已成功完成。

    SQL> EXEC DBMS_MONITOR.SERV_MOD_ACT_TRACE_DISABLE('SERVICE', 'MODULE', 'ACTION')

    PL/SQL 过程已成功完成。

    可以通过CLIENT_ID对指定客户端ID的所有会话进行TRACE,而CLIENT_ID是可以进行设置的。还可以通过会话的SERVICE_NAMEMODULE_NAMEACTION_NAME进行SQL_TRACE的设置,在11g中这种方式还可以在指定实例上生效。

    此外,DBMS_MONITOR还可以打开全库的SQL_TRACE

    SQL> EXEC DBMS_MONITOR.DATABASE_TRACE_ENABLE(TRUE, TRUE)

    PL/SQL 过程已成功完成。

    SQL> EXEC DBMS_MONITOR.DATABASE_TRACE_DISABLE

    PL/SQL 过程已成功完成。

    同样11g中,这个过程还可以指定单独的实例进行设置。

    DBMS_MONITOR虽然功能很强,可惜有版本限制,9i及以前的版本无法使用这个功能,下面这种DBMS_SYSTEM的功能可以在9i中设置其他会话的TRACE

    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_system.set_sql_trace_in_session(15, 24812, true)

    PL/SQL procedure successfully completed.

    SQL> exec dbms_system.set_sql_trace_in_session(15, 24812, false)

    PL/SQL procedure successfully completed.

    这个SET_SQL_TRACE_IN_SESSION过程在9i中也算比较常用的方法了,使用这种方法可以通过SID来设置指定会话是否开启SQL_TRACE。可惜的是,这种方法不能设置等待事件和绑定变量。

    如果在9i中,想要开启带绑定变量和等待事情的其他会话的SQL_TRACE,就只能利用DBMS_SYSTEMSET_EV过程:

    SQL> exec dbms_system.set_ev(15, 24812, 10046, 12, null)

    PL/SQL procedure successfully completed.

    SQL> exec dbms_system.set_ev(15, 24812, 10046, 0, null)

    PL/SQL procedure successfully completed.

    采用这种方法可以为指定的会话设置EVENTS,上面就是通过设置10046LEVEL 12来实现包含等待事件和绑定变量的SQL_TRACE的。

  • 相关阅读:
    UVA1401 Remember the word DP+Trie
    LG5202 「USACO2019JAN」Redistricting 动态规划+堆/单调队列优化
    模拟赛总结合集
    LG5201 「USACO2019JAN」Shortcut 最短路树
    LG5200 「USACO2019JAN」Sleepy Cow Sorting 树状数组
    LG5196 「USACO2019JAN」Cow Poetry 背包+乘法原理
    20190922 「HZOJ NOIP2019 Round #7」20190922模拟
    LG2530 「SHOI2001」化工厂装箱员 高维DP+记忆化搜索
    LG2893/POJ3666 「USACO2008FEB」Making the Grade 线性DP+决策集优化
    关于对QQ 输入法的评价
  • 原文地址:https://www.cnblogs.com/tracy/p/2092150.html
Copyright © 2011-2022 走看看