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='servicedesk';
SID    SERIAL# USERNAME
---------- ---------- ------------------------------
1082        186 CNDERP
1085        653 CNDERP
1088        482 CNDERP

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文件中查看会话的详细信息。

 

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>