服務器 A 需實時讀寫服務器 B 的數據庫 NZ、AU,避免 Replication 延遲與衝突。
| 方案 | 優點 | 缺點 | 適用場景 |
|---|---|---|---|
| OPENROWSET / OPENDATASOURCE | 臨時、無需持久對象、支持 Excel/TXT/Oracle/ODBC | 連接信息硬編碼、密碼明文、難維護、每次建連開銷大 | 一次性導入、跨異構數據源 |
| 鏈接服務器 | 持久化、統一管理、支持分布式事務、可配置安全上下文 | 配置相對繁瑣、跨實例查詢語法冗長 | 常規跨服務器業務、生產環境首選 |
| 同義詞 + 鏈接服務器 | 對應用層透明、遷移只改同義詞、代碼簡潔 | 需額外維護同義詞對象 | 長期穩定跨庫訪問、架構解耦 |
| 異構數據源 | 統一訪問 Oracle/DB2/PostgreSQL 等 | 需安裝 Provider、性能調優複雜 | 遷移專案、多源整合 |
EXEC sp_configure 'show advanced options', 1; RECONFIGURE;
EXEC sp_configure 'Ad Hoc Distributed Queries', 1; RECONFIGURE;
EXEC sp_addlinkedserver
@server = 'SRV_B', -- 邏輯名
@srvproduct = '', -- SQL Server 可空
@provider = 'SQLNCLI', -- Native Client Provider
@datasrc = '192.168.1.100'; -- 目標實例 IP/主機名\實例名
GO
-- 配置安全映射:本地登錄映射到遠端 SQL 認證
EXEC sp_addlinkedsrvlogin
@rmtsrvname = 'SRV_B',
@useself = 'FALSE',
@locallogin = NULL, -- 所有本地登錄
@rmtuser = 'readonly_user', -- 遠端用戶
@rmtpassword = 'StrongPwd#2024';
GO
-- 數據庫上下文:目標庫
USE MasterDB;
GO
CREATE SYNONYM dbo.Help_Category_NZ FOR SRV_B.NZ.dbo.Help_Category;
CREATE SYNONYM dbo.Help_Category_AU FOR SRV_B.AU.dbo.Help_Category;
GO
SELECT * FROM Help_Category_NZ WHERE CategoryName LIKE '%Promo%';
INSERT INTO Help_Category_AU (CategoryName) VALUES ('New Year Sale');
SET XACT_ABORT ON; BEGIN DISTRIBUTED TRAN。OPENQUERY 強制在遠端執行完整查詢再傳結果,避免大量數據拉回本地過濾:SELECT * FROM OPENQUERY(SRV_B, 'SELECT * FROM NZ.dbo.BigTable WHERE CreateDate > ''2024-01-01''')ALTER SYNONYM,需 DROP + CREATE 切換目標(如藍綠部署)。