SQL Server 異質複寫允許將 Oracle 資料庫作為**發行集伺服器**,資料變更經由 SQL Server **散發伺服器** 轉發至訂閱端。本文詳細說明前置需求、Oracle 客戶端配置、散發伺服器啟用、Oracle 發行集建立、發行項選擇與常見連線問題排查。
Oracle (Publisher)
│ Log Reader Agent (在散發伺服器端運行)
▼
SQL Server Distributor (散發資料庫)
│ Distribution Agent / Merge Agent
▼
SQL Server Subscriber (訂閱端)
關鍵點: Oracle 發行集**必須使用遠端散發伺服器**,不能在本機;一個散發伺服器可服務多個 Oracle 發行集。
| 項目 | 要求 |
|---|---|
| SQL Server 版本 | Enterprise / Standard / Developer (Express 不支援異質複寫) |
| Oracle 版本 | 10g R2 / 11g / 12c / 19c / 21c (需支援補充日誌) |
| Oracle 客戶端 | 散發伺服器機器需安裝 Oracle Client 11g+ (含 OLE DB Provider for Oracle / ODBC) |
| TNS 連線 | 散發伺服器能 tnsping ORCL 並 sqlplus user/pwd@ORCL 成功 |
| Oracle 補充日誌 | ALTER DATABASE ADD SUPPLEMENTAL LOG DATA; (必要,否則無法捕捉 PK 更新前值) |
| Oracle 用戶權限 | 需 CREATE SESSION, SELECT ANY TABLE, EXECUTE ANY PROCEDURE, SELECT ON V_$LOG 等 |
在 SSMS (SQL Server Management Studio) → 右鍵「複寫」→「配置散發」→ 選擇本機作為散發伺服器 → 指定散發資料庫與快照資料夾 → 完成嚮導。
ORCL)、登入帳密LONG/RAW/LONG RAW、BFILE、嵌套表等型別**不支援**複寫。| 現象 | 原因與對策 |
|---|---|
| Log Reader Agent 啟動失敗 | Oracle Client 版本不符 / TNS 名稱錯誤 / 補充日誌未開啟 / 權限不足 |
| ORA-12541: TNS:no listener | 散發伺服器防火牆阻擋 1521 / Oracle 監聽器未啟動 / TNSNAMES.ORA IP 錯誤 |
| 「無法找到主鍵」 | Oracle 表無 PK,需先 ALTER TABLE ADD CONSTRAINT PK PRIMARY KEY(col) |
| 複寫延遲大 | 網路頻寬 / 批次大小 / 索引缺失 / 散發資料庫磁碟 IO 瓶頸 |
| DDL 變更未複寫 | 異質複寫**不支援 DDL 複寫**,需手動同步結構變更 |
sp_replmonitorhelpsubscription 程序查詢詳細狀態sp_MScleanupdistributiondb)V$ARCHIVE_DEST_STATUS、V$SUPPLEMENTAL_LOGOracle 發行集名稱 **不可與散發伺服器同名**,也不可與使用同一散發伺服器的任何 SQL Server 發行集同名。
掌握此流程,即可建立穩健的 Oracle → SQL Server 異質複寫鏈路,滿足異構系統資料同步、報表卸載、緩存刷新等企業級整合需求。