使用Oracle的10046事件跟踪会话
10046事件是Oracle的一个内部事件,是对SQL_TRACE功能的增强,用于跟踪会话的详细信息。它可以设置四个级别:
1 - 启用标准的SQL_TRACE功能,等价于sql_trace;
4 - Level 1 加上绑定值(bind values);
8 - Level 1 + 等待事件跟踪;
12 - Level 1 + Level 4 + Level 8。
10046事件可以在全局设置,也可以在session级别设置,一般在生产环境很少使用全局设置,因为会占用资源,而且会生成很大的跟踪文件。
在会话级别,既可以跟踪当前的session,也可以跟踪其他用户的session,跟踪当前会话的示例如下:
SQL> alter session set events '10046 trace name context forever';
Session altered.
SQL> alter session set events '10046 trace name context forever, level 4';
Session altered.
SQL> alter session set events '10046 trace name context off';
Session altered.
跟踪其他用户的session,首先要获得sid和serial#,然后用dbms_system.set_ev进行跟踪:
SQL> select sid,serial#,username from v$session where machine='service';
SID SERIAL# USERNAME
---------- ---------- ------------------------------
1082 186 BANPING
1085 653 BANPING
1088 482 BANPING
然后可以开始跟踪会话:
SQL> exec dbms_system.set_ev(1082,186,10046,12,'')
PL/SQL procedure successfully completed.
停止跟踪:
SQL> exec dbms_system.set_ev(1082,186,10046,0,'')
PL/SQL procedure successfully completed.
这时可以查看user_dump_dest目录下生成的跟踪文件:
SQL> show parameter user_dump_dest
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
user_dump_dest string /u01/app/oracle/admin/banpingdb/udump
从而可以从.trc文件中查看会话的详细信息。
技术组织
最近评论
历史归档
广告位






