测试:
确认两个参数
SQL> show parameter timed_statistics
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
timed_statistics boolean TRUE
SQL> SHOW PARAMETER MAX_DUMP_FILE_SIZE
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
max_dump_file_size string UNLIMITED
这两个已设.
跟踪自身Session
alter session set sql_trace=true;
做sql
.....
select count(*) from user_tables;
.....
alter session set sql_trace=false;
找到tracefile
格式化Trace文件
tkprof yzoracle_ora_9497.trc yzoracle_ora_9497.sql
这样是可以的,但只能跟踪自己.
尝试跟踪第三会话
参考网上的说明:
Session 1:
conn gzdc/gzdc2009
select sid, serial#, username from v$session where
sid =
(select sid from v$mystat where rownum=1);
SID SERIAL# USERNAME
---------- ---------- ------------------------------
14 8250 GZDC
Session 2:
conn /as sysdba
,
exec dbms_system.set_ev(14,8250,10046,1,'gzdc');
执行了这一步以后 只是对其他的会话设置了跟踪事件的等级,并非开始跟踪
开始跟踪
exec dbms_system.set_sql_trace_in_session(14,8250,true);
....
在Session 1 中执行SQL 语句,Select count(*) from user_tables;
结束跟踪
exec dbms_system.set_sql_trace_in_session(14,8250,false);
关闭会话设置
exec dbms_system.set_ev(14,8250,10046,0,'gzdc');
找到tracefile name
/opt/oracle/admin/test/udump/test_ora_21792.trc
注意这个Tracefile 来自于被跟踪的会话,而不是跟踪他的会话.
格式化tracefile
tkprof /opt/oracle/admin/test/udump/test_ora_21792.trc /opt/oracle/admin/test/udump/test_ora_21792.sql
查看 /opt/oracle/admin/test/udump/test_ora_21792.sql 可以看到详细的信息.
如需要更详细的信息,可以调整跟踪的Level
exec dbms_system.set_ev(sid,serial#,event#,level#,'name');
这样就可以用SQL_Trace来跟踪某个Session在某一段时间内执行的语句,即使语句语法错误也可跟踪到.
但这样有什么用呢?
还是不能跟踪到应用程序过来的语句,因为你不知道将是哪个会话执行这个SQL??
系统级的跟踪又太大了,有没有用户级的跟踪呢?
审计?
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10248702/viewspace-675991/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/10248702/viewspace-675991/