alter session set tracefile_identifier='10046';
alter session set timed_statistics = true;
alter session set statistics_level=all;
alter session set max_dump_file_size = unlimited;
alter session set events '10046 trace name context forever,level 12';
alter session set events '10046 trace name context forever,level 12';---需要用户有alter session 权限
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)对当前用户
alter session set events '10046 trace name context forever,level 12'; 或者
alter session set events '10046 trace name context off';
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_ev(142,14,10046,8,'hr');
- PL/SQL procedure successfully completed.
结束跟踪
- 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环境罗列:
- [oracle@localhost ~]$ tkprof
- Usage: tkprof tracefile outputfile [explain= ] [table= ]
- [print= ] [insert= ] [sys= ] [sort= ]
- table=schema.tablename Use 'schema.tablename' with 'explain=' option.
- explain=user/password Connect to ORACLE and issue EXPLAIN PLAN.
- print=integer List only the first 'integer' SQL statements.
- aggregate=yes|no
- insert=filename List SQL statements and data inside INSERT statements.
- sys=no TKPROF does not list SQL statements run as user SYS.
- record=filename Record non-recursive statements found in the trace file.
- waits=yes|no Record summary for any wait events found in the trace file.
- sort=option Set of zero or more of the following sort options:
- prscnt number of times parse was called
- prscpu cpu time parsing
- prsela elapsed time parsing
- prsdsk number of disk reads during parse
- prsqry number of buffers for consistent read during parse
- prscu number of buffers for current read during parse
- prsmis number of misses in library cache during parse
- execnt number of execute was called
- execpu cpu time spent executing
- exeela elapsed time executing
- exedsk number of disk reads during execute
- exeqry number of buffers for consistent read during execute
- execu number of buffers for current read during execute
- exerow number of rows processed during execute
- exemis number of library cache misses during execute
- fchcnt number of times fetch was called
- fchcpu cpu time spent fetching
- fchela elapsed time fetching
- fchdsk number of disk reads during fetch
- fchqry number of buffers for consistent read during fetch
- fchcu number of buffers for current read during fetch
- fchrow number of rows fetched
- userid userid of user that parsed the cursor
我们通过一个例子来介绍对tkprof的使用:
- <p>SQL> show parameter timed_statistics</p><p>NAME TYPE VALUE
- ------------------------------------ ----------- ------------------------------
- timed_statistics boolean TRUE
- SQL> show parameter max_dump_file_size</p><p>NAME TYPE VALUE
- ------------------------------------ ----------- ------------------------------
- max_dump_file_size string UNLIMITED
- </p>
- sys@ORCL> alter session set sql_trace=true;
- sys@ORCL> select * from hr.departments;
- sys@ORCL> alter session set sql_trace=false; --最好是关闭跟踪,减小对性能的开销
- sys@ORCL> exit; --在运行完查询后,要退出sql*plus(断开连接),这样才能完全关闭跟踪文件,使trace文件的所有信息都是有效的。
然后,我们就可以使用tkprof:
- [oracle@localhost ~]$ tkprof /u01/app/oracle/admin/orcl/udump/orcl_ora_5467.trc tkprof_think.txt
- TKPROF: Release 10.2.0.1.0 - Production on Fri Jul 27 11:18:13 2012
- Copyright (c) 1982, 2005, Oracle. All rights reserved.
- [oracle@localhost ~]$ ls
- tkprof_think.txt
-
----转自
http://blog.youkuaiyun.com/linwaterbin/article/details/7792148