a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 298|回复: 0

[电子商务设计师] Oracle最强有力的辅助诊断工具SQL_TRACE(2)

[复制链接]
发表于 2012-8-2 09:15:48 | 显示全部楼层 |阅读模式
  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.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-6-18 22:08 , Processed in 2.186855 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表