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

SQL Server 與 Oracle 雙向連結伺服器存取語法速查

     編輯:關於SqlServer

前言

異構資料庫整合常需在 SQL Server 與 Oracle 間互查。透過 連結伺服器 可直接在 T-SQL/PL-SQL 中跨實例查詢。本文整理雙向存取的語法差異與實例。

一、Oracle 查詢 SQL Server (透過 DB Link)

在 Oracle 建立 Database Link 指向 SQL Server (需安裝 Oracle Gateway 或使用 Heterogeneous Services)。

語法特徵:**表名後加 @DBLink名稱**

SELECT H.FORM_KIND, H.FORM_NO
FROM FM_FORM_HEADER@TOBPM H, FM_FORM_APPROVE@TOBPM A
WHERE H.FORM_KIND = A.FORM_KIND
  AND H.FORM_NO = A.FORM_NO
  AND H.FORM_STATUS = 'WA'
  AND A.APP_STATUS = 'U'
  AND A.APP_EMP_ID = '000156'
  AND H.FORM_KIND IN ('SYS.FORM.009');
  • TOBPM 為 Oracle 端定義的 DB Link 名稱。
  • 所有參與 JOIN 的表皆需加 @TOBPM。

二、SQL Server 查詢 Oracle (透過 Linked Server)

在 SQL Server 建立 Linked Server (Provider: OraOLEDB.Oracle 或 MSDAORA)。

語法特徵:**四部分命名 LinkedServer..Schema.Table**

SELECT OU_ID, OU_CODE, LANGUAGE, OU_NAME, currency_code
FROM Oracle_ERP..APPS.CUX_BPM_OU_VL;
  • Oracle_ERP:Linked Server 名稱。
  • ..:目錄/資料庫名稱留空 (Oracle 無 Database 概念,通常為空)。
  • APPS:Oracle Schema (擁有者/使用者名稱)。
  • CUX_BPM_OU_VL:Table/View 名稱。

若目前登入的 Linked Server 使用者即為該 Schema 擁有者,Schema 可省略:Oracle_ERP...CUX_BPM_OU_VL (三個點)。

三、連結伺服器建立關鍵步驟

SQL Server → Oracle

  1. 安裝 Oracle Client (含 OLE DB Provider) 或 Oracle Instant Client + OraOLEDB.Oracle。
  2. SSMS → 伺服器物件 → 連結伺服器 → 右鍵「新增連結伺服器」。
  3. 提供者:Oracle Provider for OLE DB (OraOLEDB.Oracle)。
  4. 資料來源:Oracle TNS 名稱或 Easy Connect 字串 (host:port/service_name)。
  5. 安全性:對應本機登入至遠端 Oracle 使用者/密碼。

Oracle → SQL Server

  1. 配置 listener.ora、tnsnames.ora 加入 SQL Server 服務名。
  2. 建立 Database Link:
    CREATE DATABASE LINK TOBPM CONNECT TO "sql_user" IDENTIFIED BY "pwd" USING 'SQLSERVER_TNS';

四、效能與最佳實踐

建議說明
使用 OPENQUERY將過濾邏輯下推至遠端執行,減少網路傳輸:
SELECT * FROM OPENQUERY(Oracle_ERP, 'SELECT * FROM APPS.TBL WHERE COL = ''VAL''')
避免跨伺服器 JOIN大量資料 JOIN 極慢,建議先將遠端資料 INSERT INTO #temp 再本地 JOIN。
資料型別對應Oracle NUMBER → SQL numeric/decimal,DATE → datetime,CLOB → nvarchar(max)/varbinary(max)。
分散式交易跨伺服器 DML 需啟用 MSDTC,設定「啟用網路 DTC 存取」。

五、常見錯誤代碼

  • 7399 / 7303:OLE DB Provider 初始化失敗 → 檢查 Oracle Client 安裝、TNS 解析、Provider 版本位元數 (32/64-bit) 是否與 SQL Server 一致。
  • 7314:OLE DB Provider 無法啟動分散式交易 → MSDTC 服務未啟動或防火牆阻擋 135/動態埠。
  • ORA-12154:TNS 無法解析 → tnsnames.ora 設定錯誤或 Oracle Client 路徑問題。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved