Oracle 數據庫跟蹤 SQL 的幾種方法


1. 使用 AUTOTRACE 查看執行計划

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

    set autotrace OFF

 

Autotrace Setting Result
SET AUTOTRACE OFF No AUTOTRACE report is generated. This is the default.
SET AUTOTRACE ON EXPLAIN The AUTOTRACE report shows only the optimizer execution path.
SET AUTOTRACE ON STATISTICS The AUTOTRACE report shows only the SQL statement execution statistics.
SET AUTOTRACE ON The AUTOTRACE report includes both the optimizer execution path and the SQL statement execution statistics.
SET AUTOTRACE TRACEONLY Like 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

 

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM