Chinaunix首页 | 论坛 | 博客
  • 博客访问: 774853
  • 博文数量: 185
  • 博客积分: 7434
  • 博客等级: 少将
  • 技术积分: 2325
  • 用 户 组: 普通用户
  • 注册时间: 2005-12-29 14:01
文章分类

全部博文(185)

文章存档

2013年(1)

2012年(2)

2011年(17)

2010年(25)

2009年(36)

2008年(104)

分类: Oracle

2008-04-17 08:55:32

1.sql_trace
a. 全局
在 pfile/spfile 中使用
sql_trace=true
导致所有进程的活动都被跟踪,后台进程和用户SESSION ,导致严重的性能问题。慎重使用

b.当前SESSION
alter session set sql_trace=true ;
alter session set sql_trace=flase ;

c.跟踪指定的SESSION

DBMS_SYSTEM. SET_SQL_TRACE_IN_SESSION(SID,SERIAL#,SQL_TRACE);
EXP:

select sid,serial#,username from v$session ;
exec dbms_system.set_sql_trace_in_session(sid,s#,true);


2.autotrace

autotrace 只能用于sqlplus

set autotrace [on|state|traceonly]
set timming on

3.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级设置。

全局
pfile文件中加
event ="10046 trace name context forever,level 12"
包括所有进程后台进程
当前session
SQL> alter session set events '10046 trace name context forever';

Session altered.

SQL> alter session set events '10046 trace name context forever, level 8';

Session altered.

SQL> alter session set events '10046 trace name context off';

Session altered.

 对其他用户session设置
通过DBMS_SYSTEM.SET_EV系统包来实现:

 


SQL> desc dbms_system
...
PROCEDURE SET_EV
 Argument Name                  Type                    In/Out Default?
 ------------------------------ ----------------------- ------ --------
 SI                             BINARY_INTEGER          IN
 SE                             BINARY_INTEGER          IN
 EV                             BINARY_INTEGER          IN
 LE                             BINARY_INTEGER          IN
 NM                             VARCHAR2                IN

...

                     
 

其中的参数SI、SE来自v$session视图:


查询获得需要跟踪的session信息:SQL> select sid,serial#,username from v$session where username is not null;
SID SERIAL# USERNAME
---------- ---------- ------------------------------
8 2041 SYS
9 437 test


执行跟踪:
SQL> exec dbms_system.set_ev(9,437,10046,8,'test');

PL/SQL procedure successfully completed.

结束跟踪:
SQL> exec dbms_system.set_ev(9,437,10046,0,'test');

PL/SQL procedure successfully completed.

 

(c) 获取跟踪文件
以上生成的跟踪文件位于user_dump_dest目录中,位置及文件名可以通过以下SQL查询获得:

--获取trace文件名称的脚本                
select d.VALUE
       ||'/'
       ||LOWER(RTRIM(i.INSTANCE,CHR(0)))
       ||'_ora_'
       ||p.spid
       ||'.trc' trace_file_name
FROM (SELECT p.spid
      From v$mystat m,v$session s, v$process p
      WHERE m.statistic#=1 AND s.SID=m.SID AND p.addr=s.paddr) p,
     (SELECT t.INSTANCE
         From v$thread t,v$parameter v
         where v.NAME='thread'
         and (v.value=0 OR t.thread#=TO_NUMBER(v.VALUE))) i,
     (SELECT VALUE
         FROM v$parameter
         WHERE NAME='user_dump_dest') d

阅读(689) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~