3.跟踪其他用户进程
) x0 x1 o3 a: j: Y; d% N3 M 在很多时候我们需要跟踪其他用户的进程,而不是当前用户,我们可以通过Oracle提供的系统包DBMS_SYSTEM. SET_SQL_TRACE_IN_SESSION来完成。' A9 F3 j6 D, g# ^1 X5 p
SET_SQL_TRACE_IN_SESSION程序需要提供三个参数:0 L& |% K: l8 B( y4 f
SQL> desc dbms_system
7 J6 K2 F- ]; D$ X …
0 O H. t9 x7 s% F( f0 H! D8 B PROCEDURE SET_SQL_TRACE_IN_SESSION0 _3 F& P9 A! Z* [; G
Argument Name Type In/Out Default?
( T4 o7 M& ~; \6 q, h ----------------- ------------- ------ --------7 R2 U: U5 Q8 n B/ B! q8 f
SID NUMBER IN
s. u, d! u; I1 j SERIAL# NUMBER IN% E2 _6 _ z# |; N; w. h( z
SQL_TRACE BOOLEAN IN
& n3 J) L' o4 w …
( a0 w% u- d F 通过v$session我们可以获得sid、serial#等信息。, N% d. ?( B7 z5 ?2 I, ~3 W& W
获得进程信息,选择需要跟踪的进程:
; h: c8 V! V7 f5 [ SQL> select sid,serial#,username from v$session4 w* _" `% N9 O% D) e) |1 j3 B
2 where username is not null;
6 s: ~+ c, Z3 g5 H" D SID SERIAL# USERNAME k# p3 g) ~# j9 h
---------- ---------- ------------------------------ Y9 A/ Y4 l/ R5 _0 V$ I6 l( {
8 2041 SYS
' ]# f* [- M) k1 M l& C 9 437 EYGLE( n' k6 Z% Y& `; n, `2 I
设置跟踪:
2 m+ Z- H! v, _0 \% B! y SQL> exec dbms_system.set_sql_trace_in_session(9,437,true)
3 D V- e% T( k5 O, Y* _4 u: V PL/SQL procedure successfully completed.
! @8 ?6 B& o4 j ….
3 ?, v+ H# Q, ]7 T9 |( g1 b$ x 可以等候片刻,跟踪session执行任务,捕获sql操作……. j9 W0 Q( t3 N8 ]% N1 P8 k* W
停止跟踪:$ Q3 q) ]$ d, E1 Z
SQL> exec dbms_system.set_sql_trace_in_session(9,437,false)
/ O: \$ l6 n n/ e. { PL/SQL procedure successfully completed.* D* Y3 u) q# O) `5 }( ]
10046事件概述:3 n. t1 a2 w; r4 `
10046事件是Oracle提供的内部事件,是对SQL_TRACE的增强.' K: M, Z5 v$ S/ V1 Q
10046事件可以设置以下四个级别:1 ]; A$ w: a$ M( G {; J
1 - 启用标准的SQL_TRACE功能,等价于sql_trace+ P5 l8 I9 H. f1 W. u
4 - Level 1 加上绑定值(bind values)
! m+ A8 y" s8 t5 q: z 8 - Level 1 + 等待事件跟踪; {0 F7 ^. D7 R3 M* U8 z
12 - Level 1 + Level 4 + Level 8) y$ K2 C5 d' G; A! u# b. Z
类似sql_trace,10046事件可以在全局设置,也可以在session级设置。+ C* R* B3 q2 t5 [0 Q$ A
1. 在全局设置
- K: q; F' n1 w& w( A$ N5 ^! E 在参数文件中增加:$ _$ Z: |# O& ?9 Z
event="10046 trace name context forever,level 12"( r8 o* g( B, I- G
此设置对所有用户的所有进程生效、包括后台进程.
) @: _: B" M4 w) P( S6 i* O 2.对当前session设置
4 E' \: @ l. y# ] 通过alter session的方式修改,需要alter session的系统权限:
: M% B o3 }* M0 W& m' r O2 l8 m4 a SQL> alter session set events '10046 trace name context forever';
1 L+ n% S& P* H+ m+ I Session altered.! ^7 L" R; r" e# j/ ?' ^) _
SQL> alter session set events '10046 trace name context forever, level 8';
# y' Q9 Z/ T3 q8 k ? Session altered.
2 B7 Q0 L, d$ f) B SQL> alter session set events '10046 trace name context off'; [& M% e# e. U3 l# [# `
Session altered. |