| 特性 | DB2 Legacy JDBC Driver (Type 2) | DB2 Universal JDBC Driver (JCC, Type 2/4) |
| 基礎架構 | 建立在 DB2 CLI (C 調用層) 之上 | 純 Java 實現,基於 DRDA 協議,取代 CLI 及其下層 |
| 封裝文件 | db2Java.zip | db2jcc.jar (Java Common Connectivity) |
| 追蹤配置方式 | 透過 db2cli.ini 控制 | 透過 DataSource 屬性、URL 參數或程式化 API 控制 |
| 部署需求 | 必須安裝 DB2 Client | Type 4 無需 Client,Type 2 需要 |
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);
追蹤層級常數速查表
| 常數 | 整數值 | 用途 |
| TRACE_NONE | 0 | 關閉追蹤 |
| TRACE_CONNECTION_CALLS | 1 | 連接相關調用 |
| TRACE_STATEMENT_CALLS | 2 | Statement 調用 |
| TRACE_RESULT_SET_CALLS | 4 | ResultSet 調用 |
| TRACE_DRDA_FLOWS | 64 | DRDA 協議流(Type 4 關鍵) |
| TRACE_ALL | -1 | 所有類別 |
組合方式:TRACE_STATEMENT_CALLS | TRACE_RESULT_SET_CALLS (值 6)。屬性檔中直接用整數值。
最佳實踐建議
- 生產環境優先用屬性檔:不改代碼、可動態開關、支援多 DataSource 統一管理
- 按需設定層級:預設
TRACE_ALL 巨大且影響效能;問題排查時組合所需類別(如 TRACE_DRDA_FLOWS | TRACE_CONNECTS)
- 目錄分離:啟用
setTraceDirectory 讓每個連接產生獨立檔案,避免單檔過大難分析
- 配合 DRDA 追蹤:Type 4 連接跨網絡排查必開
TRACE_DRDA_FLOWS
- 上一篇文章: DB2 UDB Java 存儲過程常見錯誤碼深度解析與排錯實戰(下)
- 下一篇文章: Spring + Hibernate + JDBC 3.0:構建 DB2 持久化應用的最佳實踐指南
Copyright ©
程式碼之家 All Rights Reserved