DATE ↔ SQL Server DATETIMEOracle 9i安裝時勾選TRANSPARENT GATEWAY FOR MSSQL,產生$ORACLE_HOME/bin/tg4msql.exe與$ORACLE_HOME/tg4msql/admin/inittg4msql.ora。
HS_FDS_CONNECT_INFO="SERVER=sql_host;DATABASE=pubs"
HS_FDS_TRACE_LEVEL=OFF
HS_FDS_RECOVERY_ACCOUNT=RECOVER
HS_FDS_RECOVERY_PWD=RECOVER
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC = (GLOBAL_DBNAME = tg4msql) (PROGRAM = tg4msql) (SID_NAME = tg4msql) (ORACLE_HOME = /u01/app/oracle))
)
關鍵:PROGRAM = tg4msql啟動網關程式。
TG4MSQL =
(DESCRIPTION =
(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = sql_host)(PORT = 1527)))
(CONNECT_DATA = (SID = tg4msql))
(HS = OK)
)
Port 1527對應Listener中網關的Address。
-- SQL Server建立登入帳號 xzh/xzh,授權pubs資料庫
CREATE DATABASE LINK sql_link CONNECT TO xzh IDENTIFIED BY xzh USING 'TG4MSQL';
-- 查詢驗證
SELECT * FROM sales@sql_link;
SELECT * FROM OPENDATASOURCE('MSDAORA', 'Data Source=ora_tns;User ID=POS;Password=POS')..POS.A0325;
-- 跨庫建表
SELECT * INTO PUBS.DBO.A0325
FROM OPENDATASOURCE('MSDAORA', 'Data Source=ora_tns;User ID=POS;Password=POS')..POS.A0325;
四部分命名:伺服器..擁有者.表名,擁有者/表名必須大寫。
-- 建立
EXEC SP_ADDLINKEDSERVER @server='ORCL', @srvproduct='Oracle', @provider='MSDAORA', @datasrc='ora_tns';
-- 設定登入映射
EXEC SP_ADDLINKEDSRVLOGIN 'ORCL', FALSE, 'sa', 'POS', 'POS';
-- 查詢 (需企業管理器啟用「允許動態參數」或使用OPENQUERY)
SELECT * FROM ORCL..POS.A0325;
SELECT * FROM OPENQUERY(ORCL, 'SELECT * FROM POS.A0325');
SELECT a.* FROM OPENROWSET('MSDAORA', 'ora_tns';'POS';'POS', POS.A0325) AS a ORDER BY a.ID;
SELECT A.* FROM OPENROWSET('MSDASQL', 'ORCL_ODBC';'POS';'POS', POS.A0325) AS A ORDER BY A.ID;
| 方式 | 部署難度 | 適用場景 | 效能 |
|---|---|---|---|
| 透明網關 (Oracle→SQL) | 中 | Oracle主動拉取、ETL排程 | 高 |
| OPENDATASOURCE | 低 | 臨時查詢、單次遷移 | 中 |
| 連結伺服器 | 高 | 頻繁跨庫查詢、報表 | 高 |
| OPENROWSET | 低 | 單一陳述式、動態SQL | 中 |
| ODBC | 中 | 舊系統相容 | 中 |
推薦:Oracle端用透明網關;SQL Server端用OPENROWSET/OPENDATASOURCE (OLE DB) 簡單高效,避開連結伺服器複雜配置。