DBMS_MONITOR包跟踪10046
该包是从Oracle 10g开始提供的,Oracle官方支持。等于10046 level 12。
--跟踪当前会话: EXEC DBMS_MONITOR.SESSION_TRACE_ENABLE; SQL> --执行SQL --关闭跟踪 EXEC DBMS_MONITOR.SESSION_TRACE_DISABLE;
--跟踪其他会话: EXEC DBMS_MONITOR.SESSION_TRACE_ENABLE(SESSION_ID=>SID,SERIAL_NUM=>SERIAL#,WAITS=>TRUE,BINDS=>TRUE); SQL> --执行SQL EXEC DBMS_MONITOR.SESSION_TRACE_DISABLE(SESSION_ID=>SID,SERIAL_NUM=>SERIAL#); --查询会话是否开启跟踪,只能查询到部分方法开启的跟踪。 select sql_trace,sql_trace_waits,sql_trace_binds from v$session where sid=1; 注意:仅当使用程序包 dbms_monitor 中的过程 session_trace_enable 启用跟踪(而不是通过 alter session set sql_trace = true 或设置事件 10046)时,才会填充视图 V$SESSION。
使用DBMS_MONITOR包也可以根据client identifier来Trace多个不同的会话,client identifier可以通过V$SESSION里面client_identifier字段看到,使用方法如下:
client identifier可以通过V$SESSION里面client_identifier字段看到,使用方法如下: --设置客户端标识符 exec dbms_session.set_identifier('test_id'); -- 找出要Trace的client_identifier信息 SQL> select sid,serial#,client_identifier from v$session where client_identifier is not null; SID SERIAL# CLIENT_IDENTIFIER ---------- ---------- --------------------------------------------------------- 1 27843 test_id --利用客户端标识符设置跟踪,假设要跟踪 client_identifier是"test_id"的所有会话,如下: exec dbms_monitor.client_id_trace_enable(client_id=>'test_id',waits=>true,binds=>false); --关闭跟踪 execute dbms_monitor.client_id_trace_disable(client_id=>'test_id');