-- 1. 開啟統計與檔案大小 ALTER SESSION SET TIMED_STATISTICS = TRUE; ALTER SESSION SET MAX_DUMP_FILE_SIZE = UNLIMITED; -- 2. 設定追蹤檔識別碼 (10g+) ALTER SESSION SET TRACEFILE_IDENTIFIER = 'POX20240101'; -- 3. 開啟 10046 事件 Level 8 (含 Wait) 或 12 (含 Bind+Wait) ALTER SESSION SET EVENTS '10046 TRACE NAME CONTEXT FOREVER, LEVEL 12'; -- 4. 執行目標業務程式碼 -- ... -- 5. 關閉追蹤 ALTER SESSION SET EVENTS '10046 TRACE NAME CONTEXT OFF';
| Level | 內容 |
|---|---|
| 0 | 關閉 |
| 1 | 基本追蹤 (SQL 文本、執行計畫統計) |
| 4 | Level 1 + 綁定變數值 |
| 8 | Level 1 + 等待事件 |
| 12 | Level 1 + 4 + 8 (最完整) |
SELECT sid, serial#, username, program FROM v$session WHERE ...; -- 依條件過濾
EXEC SYS.DBMS_SYSTEM.SET_BOOL_PARAM_IN_SESSION(:sid, :serial#, 'TIMED_STATISTICS', TRUE); EXEC SYS.DBMS_SYSTEM.SET_INT_PARAM_IN_SESSION(:sid, :serial#, 'MAX_DUMP_FILE_SIZE', 2147483647);
方法 A:DBMS_SUPPORT (推薦,語意清晰)
EXEC SYS.DBMS_SUPPORT.START_TRACE_IN_SESSION(:sid, :serial#, WAITS=>TRUE, BINDS=>FALSE); -- ... 運行應用 ... EXEC SYS.DBMS_SUPPORT.STOP_TRACE_IN_SESSION(:sid, :serial#);
方法 B:DBMS_SYSTEM.SET_EV (通用,無需安裝套件)
EXEC SYS.DBMS_SYSTEM.SET_EV(:sid, :serial#, 10046, 8, ''); -- Level 8 -- ... 運行應用 ... EXEC SYS.DBMS_SYSTEM.SET_EV(:sid, :serial#, 10046, 0, ''); -- 關閉
-- 取得 OS Process ID (SPID) SELECT p.spid FROM v$process p, v$session s WHERE p.addr = s.paddr AND s.sid = :sid AND s.serial# = :serial#; -- 檔案位置:USER_DUMP_DEST 或 BACKGROUND_DUMP_DEST -- 檔名格式含 SPID 與 TRACEFILE_IDENTIFIER -- 格式化:tkprof trace.trc out.txt EXPLAIN=user/pass SYS=NO SORT=EXEELA,FCHELA
DBMS_MONITOR.SESSION_TRACE_ENABLE (11g+)。