10046事件说明10046事件是Oracle提供的内部事件,是对SQL_TRACE的增强,可以设置不同的跟踪级别,比使用SQL_TRACE获得更多的信息
10046事件可以设置以下四个级别:
1 - 启用标准的SQL_TRACE功能,等价于sql_trace
4 - Level 1 + 绑定变量值(bind values)
8 - Level 1 + 等待事件
12 - Level 1 + Level 4 + Level 8
10046事件可以在全局设置,也可以在session级设置。
1.在全局设置
修改初始化参数
EVENT = "10046 trace name context forever, level 8"
2.在当前session设置
alter session set events '10046 trace name context forever, level 8';
alter session set events '10046 trace name context off';
3.对其他用户session设置
查询获得需要跟踪的session信息:
SQL> select sid,serial#,username from v$session where username is not null;
SID SERIAL# USERNAME
---------- ---------- ------------------------------
8 2041 SYS
9 437 EYGLE
执行跟踪:
SQL> exec dbms_system.set_ev(9,437,10046,8,'eygle');
结束跟踪:
SQL> exec dbms_system.set_ev(9,437,10046,0,'eygle');
如何获取跟踪文件
SELECT a.VALUE || b.symbol || c.instance_name || '_ora_' || d.spid || '.trc' trace_file
FROM
(SELECT VALUE FROM v$parameter WHERE NAME = 'user_dump_dest') a,
(SELECT SUBSTR (VALUE, -6, 1) symbol FROM v$parameter WHERE NAME = 'user_dump_dest') b,
(SELECT instance_name FROM v$instance) c,
(SELECT spid FROM v$session s, v$process p, v$mystat m WHERE s.paddr = p.addr AND s.SID = m.SID AND m.statistic# = 0) d
在命令行下执行oracle的tkprof命令,将ora9i_ora_24722.trc转化为文本文件。如:
$ tkprof ora9i_ora_24722.trc ora9i_ora_24722.sql
此时在ora9i_ora_24722.sql文件中,就可以看到刚才执行应用程序时所执行的sql语句的执行次数、CPU使用时间等数据。
查看当前session的跟踪级别
SQL>Set serveroutput on
SQL> declare
event_level number;
begin
dbms_system.read_ev(10046,event_level);
dbms_output.put_line(to_char(event_level));
end;
/