sql trace小结

本文介绍Oracle数据库中SQLTrace与10046事件的使用方法,包括如何在当前会话及其它用户会话中启用和禁用追踪,以及如何使用DBMS_MONITOR包进行追踪。同时,还介绍了如何设置不同级别的10046事件以获取更详细的追踪信息。
摘要由CSDN通过智能技术生成

使用sql trace检查问题
可以设置sql_trace为true,但是一般不推荐在全局指定为true,只建议在本session中指定,因为该参数设置为true会跟踪当前进程,对性能造成较大影响。

一。跟踪本session进程
sql>alter session set sql_trace=true;
sql>select ....
sql>alter session set sql_trace=false;

二。跟踪其他用户进程
1.检查并跟踪数据库进程
select sid,serial#,username from v$session where username is not null;

       SID    SERIAL# USERNAME
---------- ---------- ------------------------------
       209 25265 PRT
       211  4715 CHARGE5
       237 27890 PRT 

2.启用相关进程sql_trace
sql> exec dbms_system.set_sql_trace_in_session(209,25265,true);

PL/SQL procedure successfully completed.

sql> exec dbms_system.set_sql_trace_in_session(211,4715,true);

PL/SQL procedure successfully completed.

sql> exec dbms_system.set_sql_trace_in_session(237,27890,true);

PL/SQL procedure successfully completed.

3.过一段时间关闭sql_trace
sql> exec dbms_system.set_sql_trace_in_session(209,25265,false);

PL/SQL procedure successfully completed.

sql> exec dbms_system.set_sql_trace_in_session(211,4715,false);

PL/SQL procedure successfully completed.

sql> exec dbms_system.set_sql_trace_in_session(237,27890,false);

PL/SQL procedure successfully completed.

 ===================================================================

三。另外还可以使用DBMS_MONITOR包来跟踪某个session
sql>desc DBMS_MONITOR
sql>select sid,serial#,username from v$session where username is not null;
sql>exec dbms_monitor.session_trace_enable(&sid,&serial#)
sql>select .....
sql>exec dbms_monitor.session_trace_disable(&sid,&serial#)


====================================================================

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

  1. 在全局设置

  在参数文件中增加:

  event="10046 trace name context forever,level 12"

  此设置对所有用户的所有进程生效、包括后台进程.

  2.对当前session设置

  通过alter session的方式修改,需要alter 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.

  3. 对其他用户session设置

  通过DBMS_SYSTEM.SET_EV系统包来实现: 

 select sid,serial#,username from v$session where username is not null;

       SID    SERIAL# USERNAME
---------- ---------- ------------------------------
       209 25265 PRT
       211  4715 CHARGE5
       237 27890 PRT 

  执行跟踪:

  SQL> exec dbms_system.set_ev(209,25265,10046,8,'');

  PL/SQL procedure successfully completed.

  结束跟踪:

  SQL> exec dbms_system.set_ev(209,25265,10046,0,'');

  PL/SQL procedure successfully completed.
   然后就可以查看生成的trc文件了
 ===================================================================

通过以上四种方法生成trc,然后检查最新的trc文件
trace文件名是ora_xxxx_SID.trc,其中xxxx是与Oracle连接的shadow进程的PID,SID是Oracle实例的SID。文件生成在Init.ORA参数user_dump_dest指定的目录下。
可以通过如下sql查找到这个trc文件
sqlplus / as sysdba
sql>select d.value || '/' || lower(rtrim(i.instance, chr(0))) || '_ora_' ||
       p.spid || '.trc' trace_file_name
  from (select p.spid
          from sys.v$mystat m, sys.v$session s, sys.v$process p
         where m.statistic# = 1
           and s.sid = m.sid
           and p.addr = s.paddr) p,
       (select t.instance
          from sys.v$thread t, sys.v$parameter v
         where v.name = 'thread'
           and (v.value = 0 or t.thread# = to_number(v.value))) i,
       (select value from sys.v$parameter where name = 'user_dump_dest') d
      

使用tkprof工具解析trc文件
$tkprof /opt/oracle/admin/charge/udump/charge_ora_9964.trc /opt/oracle/aa.txt
===================================================================

 

autotrace是使用:
dba权限的用户可以直接使用该功能,
如:set autotrace traceonly
但是如果没有分配dba权限的用户则需要执行$ORACLE_HOME/sqlplus/admin/plustrce.sql脚本,自动创建plustrace角色。
再把plustrace权限赋给需要的用户了
grant plusstrace to prt;
然后就可以使用autotrace功能了。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/559237/viewspace-544976/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/559237/viewspace-544976/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值