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

2014-11-24 12:08:58 · 作者: · 浏览: 1

使用sql_trace/10046事件进行 数据库诊断
sql_trace/10046事件是oracle提供的用于进行sql跟踪的手段,其内容包括sql的解析过程、sql的执行计划、绑定变量的使用、会话发生的等待事件。
在使用sql_trace/10046事件前,有两个参数需要注意:
www.2cto.com
[sql]
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) 对当前用户:
www.2cto.com
启用当前session的跟踪:alter session set sql_trace=true;
结束跟踪:alter session set sql_trace=false;
3)对其他用户:
选择跟踪的进程(用户)
[sql]
sys@ORCL> select sid,serial#,username from v$session where username is not null;
SID SERIAL# USERNAME
---------- ---------- ------------------------------
142 14 HR
159 5 SYS
设置跟踪:
[sql]
sys@ORCL> exec dbms_system.set_sql_trace_in_session(142,14,true)
PL/SQL procedure successfully completed.
停止跟踪:
www.2cto.com
[sql]
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”
www.2cto.com
ii)alter system set events ‘10046 trace name context forever,level 8';
/ alter system set events '10046 trace name context off';
2)对当前用户
alter session set events '10046 trace name context forever,level 12'; 或者
alter session set events '10046 trace name context off';
3)对其他用户
查询要跟踪的对象
[sql]
sys@ORCL> select sid,serial#,username from v$session where username is not null;
SID SERIAL# USERNAME
---------- ---------- ------------------------------
142 14 HR
159 5 SYS
执行跟踪
www.2cto.com
[sql]
sys@ORCL> exec dbms_system.set_ev(142,14,10046,8,'hr');
PL/SQL procedure successfully completed.
结束跟踪
[sql]
sys@ORCL> exec dbms_system.set_ev(142,14,10046,0,'hr');
PL/SQL procedure successfully completed.
*********************************~(@^_^@)~*************************************
由于trace文件的格式比较难以 阅读,我们可以通过TKPROF工具进行格式化,最终生成符合我们阅读习惯的sql trace 文件。
格式如下:
tkprof tracefile outputfile [options]
其中,option选项的说明和使用,我们可以通过在bash环境罗列:
www.2cto.com
[sql]
[oracle@localhost ~]$ tkprof
Usage: tkprof tracefile outputfile [explain= ] [table= ]