想写一下Oracle Trace,在网上查了一些资料,包括oracle 官网的,发现,只开启和关闭oracle trace 的方法,就很多,够写一篇文章细细的写了。所以特地把它独立出来。
首先需要把时间统计打开,否则cpu等,是不会计时的。设置TIMED_STATISTICS为True,可以在会话级别,也可以在实例级别。
会话级:
alter session set timed_statistics=True;
实例级:
alter system set timed_statistics=True scope=both;
1.在当前Session级别设置
alter session set sql_trace=true;
2.在实例级别设置
alter system set sql_trace=true scope=both;
以上都可以通过
select value from v$parameter where name='sql_trace'
来检查是否已经打开Trace;
3. 在很多时候我们需要跟踪其他用户的进程,而不是当前用户,这可以通过Oracle提供的系统包DBMS_SYSTEM. SET_SQL_TRACE_IN_SESSION来完成
Used to set trace on or off in another users session.
EXEC DBMS_System.Set_Sql_Trace_In_Session(sid, serial#, true );
EXEC DBMS_System.Set_Sql_Trace_In_Session(31, 97, true );
The values for SID and SERIAL# can be found using the V$SESSION view.
select sid,serial#,username from v$session where username is not null;
4.讲下一种方法之前,首先要说一下10046事件
10046事件是Oracle提供的内部事件,是对SQL_TRACE的增强.
10046事件可以设置以下四个级别:
1 - 启用标准的SQL_TRACE功能,等价于sql_trace
4 - Level 1 加上绑定值(bind values)
8 - Level 1 + 等待事件跟踪
12 - Level 1 + Level 4 + Level 8
类似sql_trace,10046事件可以在全局设置,也可以在session级设置。
(a)全局设置: 在参数文件(pfile/spfile)中增加:
event="10046 trace name context forever,level 12"
(b)Session 级别设置:
alter session set events '10046 trace name context forever';
alter session set events '10046 trace name context forever, level 8';
alter session set events '10046 trace name context off';
(c)Set_Ev Used to set trace on for a specific event. 对其他用户session设置:
EXEC DBMS_System.Set_Ev(sid, serial#, event, level, name);
EXEC DBMS_System.Set_Ev(31, 97, 10046, 4, '');
可以通过Read_Ev 来检查当前session 的event 10046的状态:
Used to check if a specific event is currently being traced.
EXEC DBMS_System.Read_Ev(event, output);
If output = 1 the event is being traced.
这是我写的SQL代码:
declare event_level number;
begin
sys.dbms_system.read_ev(10046,event_level);
sys.dbms_output.put_line(event_level);
end;
/
输入到PL SQL 的New Command(不是我们经常New的SQL窗口,SQL窗口是不能执行过程的)窗口执行
我的执行结果:0 说明我没有打开event 10046。
以上都是我在网上搜索并整理的。
参考:
http://www.oracle-base.com/articles/8i/dbms_system.php
http://docs.oracle.com/cd/B10500_01/server.920/a96533/sqltrace.htm
http://www.eygle.com/case/Use.sql_trace.to.Diagnose.database.htm 这个网址有很多的Oracle trace 实例 让我受益匪浅。
http://blog.csdn.net/weiwenhp/article/details/6932835
http://blog.csdn.net/tianlesoftware/article/details/5632003
http://www.oracle-base.com/articles/10g/sql-trace-10046-trcsess-and-tkprof-10g.php
每篇寄语:树尊重别人劳动成果之气,展中华儿女科技发展雄风。