会计考友 发表于 2012-8-2 09:15:48

Oracle最强有力的辅助诊断工具SQL_TRACE(2)

  3.跟踪其他用户进程
  在很多时候我们需要跟踪其他用户的进程,而不是当前用户,我们可以通过Oracle提供的系统包DBMS_SYSTEM. SET_SQL_TRACE_IN_SESSION来完成。
  SET_SQL_TRACE_IN_SESSION程序需要提供三个参数:
  SQL> desc dbms_system
  …
  PROCEDURE SET_SQL_TRACE_IN_SESSION
  Argument Name                Type      In/Out Default?
  -----------------         -------------   ------ --------
  SID                         NUMBER                IN
  SERIAL#                     NUMBER                IN
  SQL_TRACE                   BOOLEAN               IN
  …
  通过v$session我们可以获得sid、serial#等信息。
  获得进程信息,选择需要跟踪的进程:
  SQL> select sid,serial#,username from v$session
  2where username is not null;
  SID    SERIAL#USERNAME
  ---------- ---------- ------------------------------
  8       2041SYS
  9      437EYGLE
  设置跟踪:
  SQL> exec dbms_system.set_sql_trace_in_session(9,437,true)
  PL/SQL procedure successfully completed.
  ….
  可以等候片刻,跟踪session执行任务,捕获sql操作……
  停止跟踪:
  SQL> exec dbms_system.set_sql_trace_in_session(9,437,false)
  PL/SQL procedure successfully completed.
  10046事件概述:
  10046事件是Oracle提供的内部事件,是对SQL_TRACE的增强.
  10046事件可以设置以下四个级别:
  1 - 启用标准的SQL_TRACE功能,等价于sql_trace
  4 - Level 1 加上绑定值(bind values)
  8 - Level 1 + 等待事件跟踪
  12 - Level 1 + Level 4 + Level 8
  类似sql_trace,10046事件可以在全局设置,也可以在session级设置。
  1. 在全局设置
  在参数文件中增加:
  event="10046 trace name context forever,level 12"
  此设置对所有用户的所有进程生效、包括后台进程.
  2.对当前session设置
  通过alter session的方式修改,需要alter session的系统权限:
  SQL> alter session set events '10046 trace name context forever';
  Session altered.
  SQL> alter session set events '10046 trace name context forever, level 8';
  Session altered.
  SQL> alter session set events '10046 trace name context off';
  Session altered.
页: [1]
查看完整版本: Oracle最强有力的辅助诊断工具SQL_TRACE(2)