下面的方法查看设置是否成功:
select instance_name,
waits,
binds
from dba_enabled_traces
where trace_type = 'DATABASE'
下面的PL/SQL用于关闭SQL跟踪:
begin dbms_monitor.database_trace_disable(instance_name => null); end;
trace文件中的计时信息
下面的语句用于为trace文件提供计时信息:
alter session set timed_statistics = true
一般情况下默认都为true,如果不提供计时信息,trace文件就没有什么用了,因此开启SQL跟踪之前,最好确认一下参数被设置为true。
获取生成的trace文件
开启SQL跟踪后,会生成一个trace文件,通过初始化参数user_dump_dest配置其所在目录,该参数的值可以通过下面方法获取到:
select name, value from v$parameter where name = 'user_dump_dest'
但如果我们需要定位到具体的文件,则需要了解trace文件的命名。trace文件的名字是独立于版本和平台的,在大部分常见的平台下,命名结构如下:
{instance name}_{process name}_{process id}.trc
1)instance name
初始化参数instance_name的小写值。通过v$instance视图的instance_name列可以得到这个值。
2)process name
产生跟踪文件进程的名字的小写值。对于专有服务器进程,使用ora,对于共享服务器进程,可以通过v$diapatcher或v$shared_server视图的name列获得。对于并行从属进程,可以通过v$px_process视图server_name列获得,对于其他多数后台进程来说,可以通过v$bgprocess视图的name列获得。
3)process id
操作系统层面的进程标记。这个值可以通过v$process视图的spid列获取。
根据这些信息,可以通过下面的方式获取trace文件名:
select s.SID,
s.SERVER,
lower(case
when s.SERVER in ('DEDICATED', 'SHARED') then
i.INSTANCE_NAME || '_' || nvl(pp.SERVER_NAME, nvl(ss.NAME, 'ora')) || '_' ||
p.SPID || '.trc'
else
null
end) as trace_file_name
from v$instance i,
v$session s,
v$process p,
v$px_process pp,
v$shared_server ss
where s.PADDR = p.ADDR
and s.SID = pp.SID(+)
and s.PADDR = ss.PADDR(+)
and s.TYPE = 'USER'
and s.SID = 'your sid'
order by s.SID
将上面的'your sid'替换为你的session的sid就可以查出指定session生成的trace文件的名字,session的sid在v$session视图中得到,或者直接查询当前session的sid:
select userenv('sid') from dual
将路径(user_dump_dest)和文件名结合在一起,我们就得到了trace文件的完整路径。
而在Oracel 11g中,查询当前会话生成的trace文件则非常简单:
select value from v$diag_info where name = 'Default Trace File'