程序包和SQL获取trace



方法一、

一、当前会话
1、使用sqlplus登录Oracle
2、show parameter sql_trace
SQL> show parameter sql_trace;
NAME                                 TYPE        VALUE
------------------------------------ ----------- ----------
sql_trace                            boolean     FALSE
如果value是false表示系统当前不会产生trace文件.采取如下操作让系统产生trace文件:
alter session set sql_trace=true;
或者:alter system set sql_trace=true;
3、执行一些sql语句后.停止产生trace文件.
alter session(或system)  set sql_trace=false.
4、trace文件所在的默认路径:
SELECT VALUE  FROM V$PARAMETER WHERE NAME = ‘user_dump_dest‘;

二、跟踪其他用户进程
通过Oracle提供的系统包DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION。
SET_SQL_TRACE_IN_SESSION过程序要提供如下三个参数:
SID IN NUMBER,SERIAL# IN NUMBER,SQL_TRACE IN BOOLEAN
通过v$session我们可以获得sid、serial#等信息。
开启跟踪:exec dbms_system.set_sql_trace_in_session(SID,SERIAL#,true);
关闭跟踪:exec dbms_system.set_sql_trace_in_session(SID,SERIAL#,false);

方法二、

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 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‘;
3、对其他用户的session设置
通过DBMS_SYSTEM.SET_EV系统包来实现
其中的参数SI、SE还是来自v$session视图
执行跟踪:exec dbms_system.set_ev(9,437,10046,8,‘eygle‘);
结束跟踪:exec dbms_system.set_ev(9,437,10046,0,‘eygle‘);
4、获取trace文件路径的方式和一中一样。

程序包和SQL获取trace,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。