How to trace another session using PL/SQL Package

1.DBMS_SYSTEM
[sourcecode language=”sql” light=”true”]EXECUTE dbms_system.set_sql_trace_in_session (sid,serial,TRUE);[/sourcecode]
这样的trace相当于event 10046 level 1。

停止:EXECUTE dbms_system.set_sql_trace_in_session (sid,serial,FALSE);

[sourcecode language=”sql” light=”true”]EXECUTE dbms_system.set_ev (sid,serial,10046,12,”);[/sourcecode]
这样直接设置某个会话的10046 event level 12,相当于level 4+level 8,也就是binds和waits都记录下来。

停止:EXECUTE dbms_system.set_ev (sid,serial,10046,0,”);

2. DBMS_SUPPORT
[sourcecode language=”sql” light=”true”]EXECUTE dbms_support.start_trace_in_session (sid,serial,binds=>true,waits=>true);[/sourcecode]
这样的trace相当于event 10046 level 12。

停止:dbms_support.stop_trace_in_session(sid,serial);

备注:dbms_support包默认不存在,需要执行下述SQL来安装。
$ORACLE_HOME/rdbms/admin/dbmssupp.sql

3. 在Oracle10g以后可以使用DBMS_MONITOR
[sourcecode language=”sql” light=”true”]EXECUTE DBMS_MONITOR.SESSION_TRACE_ENABLE(sid,serial, binds=>true,waits=>true);[/sourcecode]
这样的trace相当于event 10046 level 12。

停止:EXECUTE DBMS_MONITOR.SESSION_TRACE_DISABLE(sid,serial);

5 thoughts on “How to trace another session using PL/SQL Package

  1. Kamus says:

    实际上要这么理解。
    1. dbms_system.set_sql_trace_in_session只能实现level 1的跟踪,而dbms_system.set_ev并不是很常规的跟踪方法,毕竟不是所有人都应该知道10046的含义的。

    2. dbms_support包默认并不存在,因此也不是常规的方法。

    3. 因此在10g中,oracle推出了dbms_monitor包。
    如果要不是说跟踪其它session,而是跟踪本session,那么实际上在10g中还有dbms_session包可以使用。

Leave a Reply

Your email address will not be published. Required fields are marked *