群集 SQL Server 中的链接服务器注意事项

在群集 SQL Server 中针对没有随 SQL Server 提供的 OLE DB 访问接口配置链接服务器时,一定要确保群集的所有节点上都安装了 OLE DB 访问接口。此外,定义链接服务器的任何属性都应是位置透明的,而不应包含假定 SQL Server 始终运行在群集的特定节点上的信息。

下面的示例针对运行 SQL Server 的服务器定义链接服务器,并在 SELECT 语句中使用由四个部分组成的名称引用其中一个远程表。(使用 SQLNCLI 并且 SQL Server 将重定向到 SQL Server Native Client OLE DB 访问接口的最新版本。)

sp_addlinkedserver @server = N'LinkServer',
    @srvproduct = N' ',
    @provider = N'SQLNCLI', 
    @datasrc = N'ServerNetName', 
    @catalog = N'AdventureWorks2008R2'
GO
SELECT *
FROM LinkServer.AdventureWorks2008R2.HumanResources.Employee
GO

环回链接服务器

可以定义链接服务器指回(环回)到在其上定义它们的服务器。当在单服务器网络中测试使用分布式查询的应用程序时,环回服务器是很有用的。

例如,在名为 MyServer 的服务器上执行下面的 sp_addlinkedserver 存储过程将定义一个环回链接服务器:

sp_addlinkedserver @server = N'MyLink',
    @srvproduct = N' ',
    @provider = N'SQLNCLI', 
    @datasrc = N'MyServer', 
    @catalog = N'AdventureWorks2008R2'
GO

使用 MyLink 作为服务器名称的 Transact-SQL 语句通过 SQLNCLI 访问接口循环并环回到本地服务器。

在分布式事务中不能使用环回链接服务器。从分布式事务内尝试对环回链接服务器进行分布式查询将导致错误,例如错误 3910:“[Microsoft][ODBC SQL Server Driver][SQL Server] 其他会话正在使用事务的上下文。”如果对环回链接服务器执行未启用多个活动结果集 (MARS) 的连接发出的 INSERT...EXECUTE 语句,则此限制不适用。请注意如果对连接启用了 MARS,则此限制仍然适用。