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

1. 使用 AUTOTRACE 查看执行计划

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

set autotrace OFF

Autotrace SettingResult
SET 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.trc
2012-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
----------
       143

SQL> 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值