首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle SQL 追蹤資訊蒐集完整指南:Session 級與跨 Session 兩種模式

     編輯:Oracle 資料庫基礎

場景一:可修改應用程式碼 — Session 級嵌入

-- 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 參數對照

Level內容
0關閉
1基本追蹤 (SQL 文本、執行計畫統計)
4Level 1 + 綁定變數值
8Level 1 + 等待事件
12Level 1 + 4 + 8 (最完整)

場景二:無法修改應用程式 — 從其他 Session 追蹤指定 Session

步驟 1:取得目標 SID, SERIAL#

SELECT sid, serial#, username, program
FROM   v$session
WHERE  ...;  -- 依條件過濾

步驟 2:設定目標 Session 參數 (SYS 權限)

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);

步驟 3:開啟/關閉追蹤 — 兩種方法

方法 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

Shared Server / Connection Pool 環境補充

  • Shared Server:單一 Dispatcher 對應多 Session,追蹤需針對特定 Session (同場景二)。
  • Connection Pool:應用重用實體連線,SID 固定但邏輯 Session 切換。建議在應用層程式碼嵌入場景一的開關,或使用 DBMS_MONITOR.SESSION_TRACE_ENABLE (11g+)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved