ALTER SESSION SET TIMED_STATISTICS = TRUE;
ALTER SESSION SET MAX_DUMP_FILE_SIZE = UNLIMITED;
ALTER SESSION SET TRACEFILE_IDENTIFIER = 'POX20240101'; -- 8.1.7+
ALTER SESSION SET EVENTS '10046 TRACE NAME CONTEXT FOREVER, LEVEL 12';
-- 執行目標業務代碼
ALTER SESSION SET EVENTS '10046 TRACE NAME CONTEXT OFF';
| Level | 內容 |
|---|---|
| 0 | 關閉 |
| 1 | 基本追蹤(SQL 文本、執行計畫、等待事件摘要) |
| 4 | Level 1 + 綁定變數值 |
| 8 | Level 1 + 等待事件明細 |
| 12 | Level 1 + 4 + 8(最完整,建議生產診斷用) |
先從 V$SESSION 取得目標 SID、SERIAL#。
EXEC SYS.DBMS_SUPPORT.START_TRACE_IN_SESSION(sid => 123, serial => 456, waits => TRUE, binds => TRUE);
-- 等待業務跑完
EXEC SYS.DBMS_SUPPORT.STOP_TRACE_IN_SESSION(sid => 123, serial => 456);
EXEC SYS.DBMS_SYSTEM.SET_EV(123, 456, 10046, 12, ''); -- 開啟 Level 12
-- 業務執行
EXEC SYS.DBMS_SYSTEM.SET_EV(123, 456, 10046, 0, ''); -- 關閉
EXEC SYS.DBMS_SYSTEM.SET_BOOL_PARAM_IN_SESSION(123, 456, 'TIMED_STATISTICS', TRUE);
EXEC SYS.DBMS_SYSTEM.SET_INT_PARAM_IN_SESSION(123, 456, 'MAX_DUMP_FILE_SIZE', 2147483647);
USER_DUMP_DEST 或 BACKGROUND_DUMP_DEST。SPID):
SELECT p.spid
FROM v$process p, v$session s
WHERE p.addr = s.paddr
AND s.sid = 123
AND s.serial# = 456;
TRACEFILE_IDENTIFIER,檔名中會含該字串,易於辨識。tkprof ora_prod_ora_12345.trc output.txt EXPLAIN=user/pass SYS=NO SORT=EXELA,FCHLA
EXPLAIN:產生執行計畫(需提供帳號)。SYS=NO:排除 SYS 遞迴 SQL。SORT:按執行時間/獲取行數排序,快速定位慢 SQL。DBMS_MONITOR.SESSION_TRACE_ENABLE(11g+)支援服務/模組/動作維度啟用。MODULE/ACTION 並用 DBMS_MONITOR.SERV_MOD_ACT_TRACE_ENABLE)。MAX_DUMP_FILE_SIZE 設為 UNLIMITED 需確保目錄有足夠配額。EXECUTIONS、ELAPSED、ROWS、WAIT EVENTS、OPTIMIZER MODE。