方法一、
一、当前会话
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文件路径的方式和一中一样。