a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 278|回复: 0

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

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 21:35 , Processed in 0.389667 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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