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

DB2 Universal JDBC Driver 追蹤技術全解析:從 Legacy CLI 到 JCC 原生跟蹤

     編輯:DB2 教學

為什麼需要 JDBC 追蹤?

JDBC 追蹤是 Java 資料庫應用開發的「聽診器」,能幫助開發人員:

  • 定位邏輯錯誤:錯誤的連接 URL、重複執行的查詢、事務邊界定義錯誤
  • 效能調優:透過函數調用進出的時間戳,快速判斷瓶頸在應用層、網絡層還是資料庫層
  • 理解第三方元件:無源碼時,追蹤日誌可揭示其資料庫交互行為

兩代驅動架構差異決定追蹤方式

Legacy Driver (Type 2) 追蹤配置

編輯 db2cli.ini(Windows: %DB2PATH%;UNIX: $HOME/sqllib/cfg):

[COMMON]
JDBCTrace=1
JDBCTracePathName=c:\temp
JDBCTraceFlush=1  ; 可選,每條記錄即時刷盤,犧牲效能換可靠性

注意: 修改僅對新連接生效,現有連接需重建。

Universal Driver (JCC) 追蹤四大變體

變體 1:DataSource 程式化配置(推薦用於獨立應用)

DB2SimpleDataSource ds = new DB2SimpleDataSource();
ds.setServerName("localhost");
ds.setPortNumber(50000);
ds.setDatabaseName("sample");
ds.setDriverType(4);  // Type 4

// 追蹤屬性
ds.setTraceDirectory("c:\\temp");
ds.setTraceFile("trace");
ds.setTraceFileAppend(false);
ds.setTraceLevel(DB2BaseDataSource.TRACE_ALL);  // -1 代表全部

產生檔案:c:\temp\trace_sds_0(sds = SimpleDataSource)。

變體 2:外部屬性檔控制(不改動源碼,適合應用伺服器環境)

建立 jcc.properties:

db2.jcc.traceDirectory=c:\\temp
db2.jcc.traceFile=trace
db2.jcc.traceFileAppend=false
db2.jcc.traceLevel=-1

啟動:java -Ddb2.jcc.propertiesFile=jcc.properties JccTraceExample2

產生檔案:c:\temp\trace_global_0。若需強制覆蓋程式碼內設定,改用 db2.jcc.override.traceDirectory 等屬性。

變體 3:DriverManager + URL 參數(快速臨時測試)

String url = "jdbc:db2://localhost:50000/sample"
  + ":traceDirectory=c:\\temp"
  + ";traceFile=trace"
  + ";traceFileAppend=false"
  + ";traceLevel=" + DB2BaseDataSource.TRACE_ALL + ";";

產生檔案:c:\temp\trace_driver_0。

變體 4:PrintWriter 重定向(自定義輸出目標)

PrintWriter pw = new PrintWriter(
    new BufferedOutputStream(new FileOutputStream("c:\\temp\\trace.txt"), 4096), true);
Connection con = ds.getConnection("user", "pwd");
((DB2Connection) con).setJccLogWriter(pw, DB2BaseDataSource.TRACE_ALL);

追蹤層級常數速查表

特性DB2 Legacy JDBC Driver (Type 2)DB2 Universal JDBC Driver (JCC, Type 2/4)
基礎架構建立在 DB2 CLI (C 調用層) 之上純 Java 實現,基於 DRDA 協議,取代 CLI 及其下層
封裝文件db2Java.zipdb2jcc.jar (Java Common Connectivity)
追蹤配置方式透過 db2cli.ini 控制透過 DataSource 屬性、URL 參數或程式化 API 控制
部署需求必須安裝 DB2 ClientType 4 無需 Client,Type 2 需要
常數整數值用途
TRACE_NONE0關閉追蹤
TRACE_CONNECTION_CALLS1連接相關調用
TRACE_STATEMENT_CALLS2Statement 調用
TRACE_RESULT_SET_CALLS4ResultSet 調用
TRACE_DRDA_FLOWS64DRDA 協議流(Type 4 關鍵)
TRACE_ALL-1所有類別

組合方式:TRACE_STATEMENT_CALLS | TRACE_RESULT_SET_CALLS (值 6)。屬性檔中直接用整數值。

最佳實踐建議

  1. 生產環境優先用屬性檔:不改代碼、可動態開關、支援多 DataSource 統一管理
  2. 按需設定層級:預設 TRACE_ALL 巨大且影響效能;問題排查時組合所需類別(如 TRACE_DRDA_FLOWS | TRACE_CONNECTS)
  3. 目錄分離:啟用 setTraceDirectory 讓每個連接產生獨立檔案,避免單檔過大難分析
  4. 配合 DRDA 追蹤:Type 4 連接跨網絡排查必開 TRACE_DRDA_FLOWS
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved