連結伺服器(Linked Server)讓 SQL Server 執行個體能存取異質資料來源(另一台 SQL Server、Oracle、PostgreSQL、Excel 等),實現跨伺服器分散式查詢與交易。本文提供標準化建立腳本與關鍵參數說明。
-- 1. 參數化設定,方便維護
DECLARE @linked_srv NVARCHAR(128) = N'LINK_PROD'; -- 連結伺服器名稱
DECLARE @remote_srv NVARCHAR(128) = N'192.168.1.100'; -- 遠端伺服器 IP/主機名
DECLARE @remote_db NVARCHAR(128) = N'ERP_DB'; -- 遠端資料庫
DECLARE @remote_user NVARCHAR(128) = N'link_user'; -- 遠端登入帳號
DECLARE @remote_pwd NVARCHAR(128) = N'Str0ngP@ssw0rd!'; -- 遠端密碼
-- 2. 若已存在則先移除(含遠端登入)
IF EXISTS (SELECT 1 FROM sys.servers WHERE name = @linked_srv)
BEGIN
EXEC sp_dropserver @server = @linked_srv, @droplogins = 'droplogins';
END
-- 3. 建立連結伺服器 (使用 SQLOLEDB / SQLNCLI 提供者)
EXEC sp_addlinkedserver
@server = @linked_srv,
@srvproduct = N'SQL Server',
@provider = N'SQLNCLI', -- 建議 SQLNCLI11 或 MSOLEDBSQL (新版)
@datasrc = @remote_srv,
@catalog = @remote_db;
-- 4. 設定遠端登入對應 (本地 sa 對應遠端 link_user)
EXEC sp_addlinkedsrvlogin
@rmtsrvname = @linked_srv,
@useself = N'FALSE', -- 不使用本地登入認證
@locallogin = N'sa', -- 本地登入 (NULL 表所有)
@rmtuser = @remote_user,
@rmtpassword = @remote_pwd;
-- 5. 重要伺服器選項設定
EXEC sp_serveroption @server = @linked_srv, @optname = N'collation compatible', @optvalue = N'true'; -- 定序相容,遠端排序
EXEC sp_serveroption @server = @linked_srv, @optname = N'use remote collation', @optvalue = N'true'; -- 使用遠端定序
EXEC sp_serveroption @server = @linked_srv, @optname = N'data access', @optvalue = N'true'; -- 啟用資料存取
EXEC sp_serveroption @server = @linked_srv, @optname = N'rpc', @optvalue = N'true'; -- 允許 RPC
EXEC sp_serveroption @server = @linked_srv, @optname = N'rpc out', @optvalue = N'true'; -- 允許 RPC 輸出
EXEC sp_serveroption @server = @linked_srv, @optname = N'remote proc transaction promotion', @optvalue = N'true'; -- 分散式交易
| 參數/選項 | 建議值 | 說明 |
|---|---|---|
@provider | SQLNCLI11 / MSOLEDBSQL | SQLNCLI 已淘汰,新版請用 Microsoft OLE DB Driver for SQL Server |
@useself | FALSE | TRUE 表用本地 Windows 認證登入遠端(需 Kerberos/SPN),FALSE 使用指定 SQL 帳號 |
collation compatible | true | 假設遠端定序相容,查詢時可下推排序/比較運算到遠端,大幅提升效能 |
rpc / rpc out | true | 啟用 EXEC [LinkedServer].db.dbo.proc 遠端預存程序呼叫 |
remote proc transaction promotion | true | 允許遠端程序提升為分散式交易 (MSDTC 需啟用) |
-- 測試基本連線
EXEC sp_testlinkedserver @linked_srv;
-- 測試查詢 (四部份命名)
SELECT TOP 3 * FROM [LINK_PROD].[ERP_DB].[dbo].[Customers];
-- 測試 RPC 呼叫
EXEC [LINK_PROD].[ERP_DB].[dbo].[usp_GetOrderCount] @CustID = 1001;
@useself = FALSE)COLLATE DATABASE_DEFAULT 或設定 collation compatible = trueSELECT/EXECUTE 必要物件)sys.linked_logins 與 sys.serversrpc out 僅必要連結伺服器啟用掌握連結伺服器建立與調校,即可打破資料孤島,實現跨伺服器即時整合查詢與異質資料來源存取。