叢集 SQL Server 內的連結伺服器考量
針對非由 SQL Server 所隨附的 OLE DB 提供者,在叢集 SQL Server 中設定連結伺服器時,請確認 OLE DB 提供者已安裝於叢集的所有節點上。此外,定義連結伺服器的任意屬性都必須與位置無關;它們所包含的任何資訊都不應假設 SQL Server 一定執行於叢集的某個特定節點上。
以下範例會對執行 SQL Server 的伺服器定義一個連結伺服器,並在 SELECT 陳述式內使用四部份名稱參考某個遠端資料表。(使用 SQLNCLI 和 SQL Server 將會導向 SQL Server Native Client OLE DB Provider 的最新版)。
sp_addlinkedserver @server = N'LinkServer',
@srvproduct = N' ',
@provider = N'SQLNCLI',
@datasrc = N'ServerNetName',
@catalog = N'AdventureWorks'
GO
SELECT *
FROM LinkServer.AdventureWorks.HumanResources.Employee
GO
回送連結伺服器
連結伺服器可定義成定指回 (回送,Loopback) 至定義它們的伺服器上。回送伺服器最適合用於測試針對單一伺服器網路使用分散式查詢的應用程式。
例如,在稱為 MyServer 的伺服器上執行以下 sp_addlinkedserver 預存程序,可定義一個回送連結伺服器:
sp_addlinkedserver @server = N'MyLink',
@srvproduct = N' ',
@provider = N'SQLNCLI',
@datasrc = N'MyServer',
@catalog = N'AdventureWorks'
GO
使用 MyLink 作為伺服器名稱的 Transact-SQL 陳述式,會透過 SQLNCLI 提供者形成迴圈,然後再回到本機伺服器。
回送連結伺服器不能用於分散式交易內。在分散式交易內對回送連結伺服器嘗試執行分散式查詢,會導致錯誤發生,例如錯誤 3910:「[Microsoft][ODBC SQL Server Driver][SQL Server]交易內容正由另一個工作階段所使用。」當 INSERT...EXECUTE 陳述式 (由沒有啟用 Multiple Active Result Set (MARS) 的連接所發出) 針對回送連結伺服器執行時,不會適用這項限制。請注意,當連接啟用 MARS 時,仍然會適用這項限制。