3.跟踪其他用户进程
. g& j' A j& v 在很多时候我们需要跟踪其他用户的进程,而不是当前用户,我们可以通过Oracle提供的系统包DBMS_SYSTEM. SET_SQL_TRACE_IN_SESSION来完成。1 K) P' S6 I* R
SET_SQL_TRACE_IN_SESSION程序需要提供三个参数:
0 j" ]4 C' s; l0 I' E7 _7 E SQL> desc dbms_system! o! a" K5 ^$ q7 T
…; E5 c( D- y! K D% o
PROCEDURE SET_SQL_TRACE_IN_SESSION/ W1 f2 O' e" t# |5 G
Argument Name Type In/Out Default?, X7 c' ?$ ^+ a6 f" E
----------------- ------------- ------ --------& e/ |; n) I6 I" l( S
SID NUMBER IN
8 n& }7 I6 K4 z SERIAL# NUMBER IN1 l; p1 @7 ]# b
SQL_TRACE BOOLEAN IN0 G' _, M- M+ Y, Q
…7 c( [% y( U! \5 Z( c! p
通过v$session我们可以获得sid、serial#等信息。
; G1 i# j. ^7 c: H H 获得进程信息,选择需要跟踪的进程:6 N$ J8 b. i" O* F6 k' }# |+ ^- u% n
SQL> select sid,serial#,username from v$session( |; I+ Q; z0 p4 x! K
2 where username is not null;
. D0 b; o7 K) t9 c: N7 p SID SERIAL# USERNAME$ I: S; z0 E9 ?; h
---------- ---------- ------------------------------
: R+ y( A: C+ E3 A8 x: S! n. I 8 2041 SYS
/ S+ s9 B: Q: A" Q( b( t 9 437 EYGLE( }" R' L7 F" ^4 v! _1 g1 B1 k
设置跟踪:' e9 ~( e# {! F& X0 j7 ?
SQL> exec dbms_system.set_sql_trace_in_session(9,437,true)
! h$ ]& a# l9 O PL/SQL procedure successfully completed.
3 L4 b. u% T p( K6 x ….
( j% v, F+ s$ }. | 可以等候片刻,跟踪session执行任务,捕获sql操作……
; @; d8 ^/ l4 d! a% R3 e& ]; h 停止跟踪:, a" T6 s: D" t9 {. F. _) l
SQL> exec dbms_system.set_sql_trace_in_session(9,437,false)
$ S* [4 e+ {9 Q! }/ I1 e PL/SQL procedure successfully completed.
$ L7 t- f7 i2 K9 G, T" q w 10046事件概述:
3 J0 _4 l) k- O: j1 d1 N) v 10046事件是Oracle提供的内部事件,是对SQL_TRACE的增强.
/ }9 w! h! R( G3 z% S 10046事件可以设置以下四个级别:8 Q3 _$ Q! K* z( L
1 - 启用标准的SQL_TRACE功能,等价于sql_trace% t% R$ L! M& ~: q; P) \. b
4 - Level 1 加上绑定值(bind values)
* Q1 ?% ?4 W" f/ y8 \( W( ~# ` 8 - Level 1 + 等待事件跟踪
$ `) W0 x m' e6 R q. i2 \ 12 - Level 1 + Level 4 + Level 8
5 g% w- r5 e6 ~; |5 _- i4 a$ |, f 类似sql_trace,10046事件可以在全局设置,也可以在session级设置。1 ^3 B5 u; m' T' Z9 L5 ]2 k
1. 在全局设置
6 K) O0 G2 Z( u0 J! M: a; I" ]( G 在参数文件中增加:
3 B9 ^* Y- v, m m* ^3 K5 a8 w8 q event="10046 trace name context forever,level 12": z1 Q6 a5 T$ |. p2 n6 o
此设置对所有用户的所有进程生效、包括后台进程.
7 O& H8 S8 Z2 H1 i. Y, r' o( @ 2.对当前session设置9 G/ F+ H8 x9 i% `) D
通过alter session的方式修改,需要alter session的系统权限:
+ j% U* T. W5 a' j8 A6 P SQL> alter session set events '10046 trace name context forever';
% F* T' `# f* ]. Q5 i Session altered." w( x' H ^4 S' ~8 @
SQL> alter session set events '10046 trace name context forever, level 8';7 E( y& {+ V5 A( n+ P6 J5 @
Session altered.' X) N% x, w, d1 x. {2 N
SQL> alter session set events '10046 trace name context off';9 c, U7 t* ]9 [/ \
Session altered. |