alter system set timed_statistics=true
--或
alter session set timed_statistics=true --if want to trace your own session
-- 必须足够大:
select value from v$parameter p
where name='max_dump_file_size'
-- 找出您感兴趣的会话的 sid 和序列号:
select sid, serial# from v$session
where ...your_search_params...
--可以从10046事件开始跟踪,第四个参数设置跟踪级别(12最大):
begin
sys.dbms_system.set_ev(sid, serial#, 10046, 12, '');
end;
--关闭跟踪设置零电平:
begin
sys.dbms_system.set_ev(sid, serial#, 10046, 0, '');
end;
/*可能的级别:
0 - 关闭
1 - 最低级别。很像设置 sql_trace=true
4 - 绑定变量值被添加到跟踪文件
8 - 添加等待
12 - 添加绑定变量值和等待事件
*/
--如果你想用更大的级别跟踪你自己的会话,也一样:
alter session set events '10046 trace name context forever, level 12';
--关闭:
alter session set events '10046 trace name context off';
--带有原始跟踪信息的文件将被定位:
select value from v$parameter p
where name='user_dump_dest'
--文件名(*.trc) 将包含spid:
select p.spid from v$session s, v$process p
where s.paddr=p.addr
and ...your_search_params...
--也可以自己设置名字:
alter session set tracefile_identifier='UniqueString';
--最后,使用TKPROF 使跟踪文件更具可读性:
C:\ORACLE\admin\databaseSID\udump>
C:\ORACLE\admin\databaseSID\udump>tkprof my_trace_file.trc output=my_file.prf
TKPROF: Release 9.2.0.1.0 - Production on Wed Sep 22 18:05:00 2004
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
C:\ORACLE\admin\databaseSID\udump>
--查看跟踪文件使用状态:
set serveroutput on size 30000;
declare
ALevel binary_integer;
begin
SYS.DBMS_SYSTEM.Read_Ev(10046, ALevel);
if ALevel = 0 then
DBMS_OUTPUT.Put_Line('sql_trace is off');
else
DBMS_OUTPUT.Put_Line('sql_trace is on');
end if;
end;
/
只是翻译了http://www.sql.ru/faq/faq_topic.aspx?fid=389 原文更完整,但无论如何这比其他人发布的恕我直言要好