Oracle 数据库跟踪 SQL 的几种方法

来源:互联网 发布:查看别人淘宝店铺流量 编辑:程序博客网 时间:2024/06/05 22:30

1. 使用 AUTOTRACE 查看执行计划

set autotrace ON | ON EXPLAIN | ON STATISTICS | TRACEONLY | TRACEONLY EXPLAIN

set autotrace OFF

Autotrace SettingResultSET AUTOTRACE OFFNo AUTOTRACE report is generated. This is the default.SET AUTOTRACE ON EXPLAINThe AUTOTRACE report shows only the optimizer execution path.SET AUTOTRACE ON STATISTICSThe AUTOTRACE report shows only the SQL statement execution statistics.SET AUTOTRACE ONThe AUTOTRACE report includes both the optimizer execution path and the SQL statement execution statistics.SET AUTOTRACE TRACEONLYLike SET AUTOTRACE ON, but suppresses the printing of the user's query output, if any. If STATISTICS is enabled, query data is still fetched, but not printed.

2. 启用 sql_trace 跟踪当前 session

  • 开启会话跟踪:alter session set sql_trace=true;
  • 关闭会话跟踪:alter session set sql_trace=false;

3. 启用 10046 事件跟踪当前 session

  • 开启会话跟踪:alter session set events '10046 trace name context forever, level 12';
  • 关闭会话跟踪:alter session set events '10046 trace name context off';
  • 对跟踪文件加标识:alter session set tracefile_identifier='dragon';
复制代码
SQL> host dir E:\ORACLE\PRODUCT\10.2.0\ADMIN\BYISDB\UDUMP\ 驱动器 E 中的卷是 DISK1_VOL3 卷的序列号是 609E-62D9 E:\ORACLE\PRODUCT\10.2.0\ADMIN\BYISDB\UDUMP 的目录 2012-07-19  17:58    <DIR>          .2012-07-19  17:58    <DIR>          ..2012-07-19  17:58             3,057 byisdb_ora_704.trc2012-07-19  17:58           169,447 byisdb_ora_704_dragon.trc               2 个文件        172,504 字节               2 个目录 22,060,634,112 可用字节
复制代码

4. 启用 10046 事件跟踪全局 session

这将会对整个系统的性能产生严重的影响,所以一般不建议开启。

  • 开启会话跟踪:alter system set events ‘10046 trace name context forever, level 12’;
  • 关闭会话跟踪:alter system set events ‘10046 trace name context off’;

5. 使用 Oracle 系统包 DBMS_SYSTEM.SET_EV 跟踪指定 session

PROCEDURE SET_EV

参数名称 类型 输入/输出默认值?

------------------------------ ----------------------- ------ --------

SI BINARY_INTEGER IN

SE BINARY_INTEGER IN

EV BINARY_INTEGER IN

LE BINARY_INTEGER IN

NM VARCHAR2 IN

参数说明:

SI-指定SESSION的SID;

SE-指定SESSION的SE;

EV-事件ID(如:10046);

LE-表示TRACE的级别;

NM-指定SESSION的username;

复制代码
SQL> select userenv('sid') sid from dual;       SID----------       143SQL> select sid, serial#, username from v$session where sid=143;       SID    SERIAL# USERNAME---------- ---------- ------------------------------       143        112 UNA_HR
复制代码

  • 开启会话跟踪:SQL> exec dbms_system.set_ev(143, 112, 10046, 12, '');
  • 关闭会话跟踪:SQL> exec dbms_system.set_ev(143, 112, 10046, 0, '');

6. 获取跟踪文件

复制代码
SQL> select pr.value || '\' || i.instance_name || '_ora_' || to_char(ps.spid) || '.trc' "trace file name" from v$session s, v$process ps, v$parameter pr, v$instance i where s.paddr = ps.addr and s.sid = userenv('sid') and pr.name = 'user_dump_dest';trace file name--------------------------------------------------------------------------------E:\ORACLE\PRODUCT\10.2.0\ADMIN\BYISDB\UDUMP\byisdb_ora_372.trc
复制代码

7. 使用 TKPROF 工具格式化

tkprof tracefile outputfile [options]

E:\oracle\product\10.2.0\admin\byisdb\udump>tkprof byisdb_ora_704.trc 10046.txt sys=no sort=prsela, exeela, fchela

0 0
原创粉丝点击