SQL中如何利用10046事件扩展SQL跟踪

这篇文章将为大家详细讲解有关SQL中如何利用10046事件扩展SQL跟踪,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

在会话sql_trace的基础上,利用10046诊断事件,可以扩展sql_trace的功能,主要体现在对绑定变量和等待事件的跟踪上。

10046诊断事件可以设置的四个级别:

level 1

启用标准的SQL跟踪,等价于sql_trace

level 4

level  1 + 绑定变量信息

level 8

level  1 + 等待事件信息

level 12

level 1 +  level 4 + level 8

启用自己会话的10046事件跟踪

alter session set events '10046 trace name context forever,level 12';

关闭10046事件跟踪

alter session set events '10046 trace name context off';

设置对指定会话的跟踪,有以下几种方法:

1、通过程序包dbms_monitor

开启跟踪

exec dbms_monitor.session_trace_enable(, , waits => true, binds => true);

关闭跟踪

exec dbms_monitor.session_trace_disable(, );

2、通过程序包dbms_system

开启跟踪

exec dbms_system.set_ev(, , 10046, 12, '');

关闭跟踪

exec dbms_system.set_ev(, , 10046, 0, '');

3、通过oradebug

开启跟踪

oradebug setorapid ; oradebug setospid ;

oradebug session_event 10046 trace name context forever, level 12;

确定跟踪文件路径

oradebug tracefile_name;

关闭跟踪

oradebug event 10046 trace name context off;

当前会话的事件编号及其级别,可以用以下代码获取

set serveroutput on

declare

event_level number;

begin

    for event_number in 10000 .. 10999 loop

        dbms_system.read_ev(event_number, event_level);

        if (event_level > 0) then

            dbms_output.put_line('Event ' || to_char(event_number) ||

                                 ' is set at level ' ||

                                 to_char(event_level));

        end if;

    end loop;

end;

/

关于“SQL中如何利用10046事件扩展SQL跟踪”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。