跨異質資料庫查詢是企業整合常見需求。本文以 SQL Server 2000 為例,詳細記錄從 Oracle Client 安裝、TNS 設定、ODBC DSN 建立,到連結伺服器配置與四部分命名查詢的完整流程。
路徑通常在 ORACLE_HOME\network\admin\tnsnames.ora,新增服務別名:
TEST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.11.90)(PORT = 1521))
)
(CONNECT_DATA =
(SID = blue)
(SERVER = DEDICATED)
)
)
測試:命令列執行 tnsping TEST 確認解析正常。
ORA_LINK(自訂)Microsoft OLE DB Provider for OracleTESTUser ID=ora_user;Password=ora_pwd(Oracle 端帳密)在 Enterprise Manager 連結伺服器下展開「資料表」,即可看到 Oracle 使用者擁有的所有表格。
實際查詢需在「查詢分析器」使用四部分命名:
SELECT * FROM [ORA_LINK]..[ORA_USER].[TABLE_NAME];
[ORA_LINK][ORA_USER][TABLE_NAME]| 現象 | 原因與對策 |
|---|---|
| 「找不到提供者」 | 未安裝 Oracle Client 或 OLE DB Provider 未註冊 → 重裝 Client 並勾選 OLE DB 元件 |
| 「ORA-12154: TNS could not resolve」 | tnsnames.ora 路徑錯誤、別名拼寫錯誤、多 Oracle Home 衝突 → 確認 TNS_ADMIN 環境變數指向正確資料夾 |
| 權限不足 | 連結伺服器安全性頁籤帳密錯誤、Oracle 端未授與 SELECT 權限 |
| 中文亂碼 | Oracle NLS_LANG 設定與 SQL Server 代碼頁不一致 → 統一設定為 TRADITIONAL CHINESE_TAIWAN.ZHT16MSWIN950 |
複雜 JOIN 或大量資料建議用 OPENQUERY 在 Oracle 端完成過濾/聚合,再傳回結果:
SELECT * FROM OPENQUERY(ORA_LINK, 'SELECT col1, col2 FROM ora_user.big_table WHERE dt > SYSDATE-30');
此法可大幅降低網路傳輸量並利用 Oracle 端索引。