开启 Oracle Trace

想写一下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

 

每篇寄语:树尊重别人劳动成果之气,展中华儿女科技发展雄风。

posted @ 2012-10-01 17:03  时间:实践  阅读(2139)  评论(0编辑  收藏  举报