Oracle SQL Trace 和 10046 事件

2014-11-24 17:57:30 · 作者: · 浏览: 0

一. SQL_TRACE



可以通过sql命令启动SQL_TRACE,或者在初始化参数里面。



SQL>alter session set sql_trace=true;


或者


SQL> alter database set sql_trace=true;



这两条命令的区别:


session级别设置,只对当前session进行跟踪,在实例级别,会对实例上所有的SQL做跟踪,这种方式跟踪的SQL太多,代价是非常大的,所有很少用。



如果是在初始化文件里面设置,只需要在参数文件里添加一个sql_trace 参数即可。




示例:



1.确定当前的trace文件。



1.1通过设置trace 文件标识


SQL> alter session set tracefile_identifier='安庆怀宁';


会话已更改。



设置标识的目的就是方便我们查找生成的trace文件。我们只需要在trace目录查找文件名里带有标识的文件即可。 Oracle 10g中,SQL_TRACE生成的trace文件默认路劲是$ORACLE_BASE/admin/SID/udump.


到了11gtrace 默认路径在:$ORACLE_BASE/diag/rdbms/orcl/orcl/trace目录下.



1.2直接用如下SQL直接查出,当前的trace文件名。


/* Formatted on 2010/9/1 23:56:24 (QP5 v5.115.810.9015) */


SELECTd.VALUE


|| '/'


|| LOWER(RTRIM(i.INSTANCE,CHR(0)))


|| '_ora_'


|| p.spid


|| '.trc'


AS"trace_file_name"


FROM(SELECTp.spid


FROMv$mystat m, v$session s, v$process p


WHEREm.statistic# =1AND s.SID=m.SIDANDp.addr = s.paddr)p,


(SELECTt.INSTANCE


FROMv$thread t, v$parameter v


WHEREv.NAME='thread'


AND(v.VALUE=0ORt.thread# =TO_NUMBER(v.VALUE))) i,


(SELECTVALUE


FROMv$parameter


WHERENAME='user_dump_dest') d;



SQL> SELECTd.VALUE


2|| '/'


3|| LOWER (RTRIM (i.INSTANCE, CHR (0)))


4|| '_ora_'


5|| p.spid


6|| '.trc' as "trace_file_name"


7FROM (SELECT p.spid


8FROM v$mystat m, v$session s, v$process p


9WHERE m.statistic# = 1 AND s.SID = m.SID AND p.addr = s.paddr) p,


10(SELECT t.INSTANCE


11FROM v$thread t, v$parameter v


12WHERE v.NAME = 'thread'


13AND (v.VALUE = 0 OR t.thread# = TO_NUMBER (v.VALUE))) i,


14(SELECT VALUE


15FROM v$parameter


16WHERE NAME = 'user_dump_dest') d;



trace_file_name


--------------------------------------------------------------------------------


d:/app/administrator/diag/rdbms/orcl/orcl/trace/orcl_ora_3048.trc



2.启动SQL_TRACE


SQL> alter session set sql_trace=true;


会话已更改。



3.进行相关事务操作


SQL> select * from t;



4.关闭SQL_TRACE


SQL> alter session set sql_trace=false;


会话已更改。



注意,这里是显示的关闭SQL_TRACE,在session级别,也可以直接退出SQLPLUS来终止SQL_TRACE