在 Windows 環境下,SQL Server 通過 Linked Server 機制實現異構數據訪問,底層依賴 OLE DB Provider for DB2 再經由 ODBC Driver for DB2 連接遠端 DB2 實例。本文以 Windows 2000 + SQL Server 2000 + DB2 7.2 Client 為基準環境,梳理標準化配置流程,原理適用於後續所有版本。
db2 connect to <db_alias> user <uid> using <pwd> 成功。DB2_LINK (後續 Linked Server 將引用此名)。DB2_PROD (將用於四部件命名)。DB2_LINK。User ID=db2_user;Password=db2_pwd 或 UID=db2_user;PWD=db2_pwd (對應 DB2 端認證)。Data Access = True, RPC Out = True) 即可。DB2_PROD → 表,右側應列出該 DB2 用戶擁有的所有表 (或有權限的表)。SELECT * FROM [DB2_PROD]..[DB2_SCHEMA].[TABLE_NAME];
-- 或
SELECT * FROM OPENQUERY(DB2_PROD, 'SELECT * FROM DB2_SCHEMA.TABLE_NAME');
OPENQUERY 將查詢下推至 DB2 執行,適合複雜 JOIN/聚合,減少跨網絡數據傳輸。| 現象 | 可能原因 | 處置 |
|---|---|---|
| 「找不到提供程序」 | 未安裝 IBM OLE DB Provider / 位數不匹配 (32/64 位) | 安裝對應位數 Provider;SQL Server 64 位需 64 位 Provider |
| 「登錄失敗 / 認證錯誤」 | Provider String 或安全性頁籤帳密與 DB2 不一致 | 核對 UID/PWD;確認 DB2 用戶具備 CONNECT 權限 |
| 「無法獲取架構/表列表」 | DB2 用戶無系統目錄查詢權限 / 大小寫敏感 | GRANT SELECT ON SYSCAT.TABLES TO USER; 注意模式名大寫 |
| 查詢極慢 / 超時 | 未使用 OPENQUERY 下推;網絡延遲大;缺乏索引 | 改寫為 OPENQUERY;檢查 DB2 端执行計劃;優化索引 |
| 字符集亂碼 | DB2 數據庫編碼 (如 GBK/UTF-8) 與 SQL Server 代碼頁不匹配 | ODBC DSN 設置 CurrentSchema、CodePage;或在查詢中显式 CAST |
RUNSTATS,確保 SQL Server 優化器通過 Linked Server 獲取到較準確的基數估算。Enable Promotion of Distributed Transactions = True,可實現跨庫 ACID (需 DB2 端支援 XA)。掌握上述流程,即可在 SQL Server 中透明訪問 DB2 數據,實現異構查詢、異構存儲過程調用、跨庫事務等企業級集成場景。