日期:2014-05-16  浏览次数:20435 次

使用sql_trace/10046事件进行数据库诊断

      sql_trace/10046事件是oracle提供的用于进行sql跟踪的手段,其内容包括sql的解析过程、sql的执行计划、绑定变量的使用、会话发生的等待事件。

   

    在使用sql_trace/10046事件前,有两个参数需要注意:

sys@ORCL> show parameter max_dump_file_size  --对trace文件的大小限制       

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
max_dump_file_size                   string      UNLIMITED
sys@ORCL> show parameter timed_statistics    --对重要信息的收集

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
timed_statistics                     boolean     TRUE
 

 

      sql_trace的作用域:

    1)对所有用户:

        i)在参数文件中指定sql_trace=true

       ii)alter system set sql_trace=true/false

    2) 对当前用户:

        启用当前session的跟踪:alter session set sql_trace=true;

        结束跟踪:alter session set sql_trace=false;

    3)对其他用户:

        选择跟踪的进程(用户)

sys@ORCL> select sid,serial#,username from v$session where username is not null;

       SID    SERIAL# USERNAME
---------- ---------- ------------------------------
       142         14 HR
       159          5 SYS


        设置跟踪:

sys@ORCL> exec dbms_system.set_sql_trace_in_session(142,14,true) 

PL/SQL procedure successfully completed.


        停止跟踪:

sys@ORCL> exec dbms_system.set_sql_trace_in_session(142,14,false)

PL/SQL procedure successfully completed.


   

    *************************************↖(^ω^)↗**********************************

    10046事件是对sql_trace的增强,可分4个级别,具体如下:

    1)level 1:等价于sql_trace

    2)level 4:level 1+绑定值

    3)level 8:level 1+等待事件跟踪

    4)level 12:等价于level 1+level 4+level 8

    10046事件的作用域:

    1)对所有用户

        i)在参数文件中修改:event=“10046 trace name context forever,level 12”

       ii)alter system set events ‘10046 trace name context forever,level 8';

            / alter system set events '10046 trace name context off';

    2)对当