首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle 10g trcsess 實用程式:SQL 追蹤檔整合分析利器

     編輯:Oracle 資料庫相關知識

前言

Oracle 10g 引入 trcsess 工具,可依 Session ID、Module 名稱等條件,從大量追蹤檔中擷取特定會話的追蹤資料並合併輸出。對於共用伺服器架構(一個會話產生多個追蹤檔)特別有用。

一、應用程式可修改原始碼時:直接嵌入追蹤控制

-- 1. 開啟計時統計(8.1.7+)
ALTER SESSION SET TIMED_STATISTICS = TRUE;

-- 2. 設定追蹤檔大小無限制(9i+)
ALTER SESSION SET MAX_DUMP_FILE_SIZE = UNLIMITED;

-- 3. 設定追蹤檔識別碼,易於辨識(9i+)
ALTER SESSION SET TRACEFILE_IDENTIFIER = 'POX20031031a';

-- 4. 開啟 SQL 追蹤(Level 8:含等待事件)
ALTER SESSION SET EVENTS '10046 TRACE NAME CONTEXT FOREVER, LEVEL 8';

-- 此處執行應用程式邏輯

-- 5. 關閉追蹤
ALTER SESSION SET EVENTS '10046 TRACE NAME CONTEXT OFF';

Level 說明:0=關閉、1=基本、4=含繫結變數、8=含等待事件、12=1+4+8 全部。

二、應用程式不可修改時:從其他 Session 控制目標 Session 追蹤

需先從 V$SESSION 取得目標 SID、SERIAL#。

方法 1:DBMS_SUPPORT 套件(官方推薦,自動處理 Event 10046)

-- 開啟計時與追蹤檔大小
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);

-- 開始追蹤
EXEC SYS.DBMS_SUPPORT.START_TRACE_IN_SESSION(sid, serial, WAITS=>TRUE, BINDS=>FALSE);
-- 執行目標應用程式
-- 停止追蹤
EXEC SYS.DBMS_SUPPORT.STOP_TRACE_IN_SESSION(sid, serial);

方法 2:DBMS_SYSTEM.SET_EV(通用,手動指定 Event 10046)

EXEC SYS.DBMS_SYSTEM.SET_EV(sid, serial, 10046, 8, '');  -- 開啟 Level 8
-- 執行目標應用程式
EXEC SYS.DBMS_SYSTEM.SET_EV(sid, serial, 10046, 0, '');  -- 關閉

三、尋找追蹤檔位置

追蹤檔位於 USER_DUMP_DEST 或 BACKGROUND_DUMP_DEST。檔名包含 OS Process ID(V$PROCESS.SPID),可透過以下查詢取得:

SELECT p.spid
FROM v$process p, v$session s
WHERE p.addr = s.paddr
  AND s.sid = :sid
  AND s.serial# = :serial;

四、trcsess 使用示例

trcsess output=merged.trc session=123.456 *.trc
# 依 Session ID 合併所有 *.trc 為 merged.trc

trcsess output=module.trc module=OrderEntry *.trc
# 依 Module 名稱合併

小結

trcsess 解決共用伺服器環境下追蹤檔碎片化問題,配合 10046 事件與 DBMS_SUPPORT/DBMS_SYSTEM 套件,構建完整的 SQL 效能診斷工具鏈。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved