Поделиться через


Соображения об использовании связанных серверов в кластеризованном сервере SQL Server

Если связанные серверы настроены в кластеризованном сервере SQL Server для поставщиков OLE DB, которые не поставляются с SQL Server, следует убедиться, что поставщики OLE DB установлены на всех узлах в кластере. Кроме того, любые свойства, определяющие связанный сервер, должны быть независимыми от местонахождения; они не должны содержать данных, в соответствии с которыми предполагается, что SQL Server всегда функционирует на определенном узле кластера.

В следующем примере определяется связанный сервер для сервера, на котором функционирует SQL Server, и формируется ссылка на одну из удаленных таблиц с использованием четырехчастного имени в инструкции SELECT. (При использовании SQLNCLI SQL Server выполнит перенаправление к последней версии поставщика OLE DB для собственного клиента SQL Server.)

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

Связанные серверы с обратной связью

Связанные серверы могут быть определены таким образом, чтобы указывать на сервер, на котором они определены (обратная связь). Серверы с обратной связью наиболее полезны для тестирования приложения, в котором используются распределенные запросы в односерверной сети.

Например, выполнение следующей хранимой процедуры sp_addlinkedserver на сервере с именем MyServer определяет связанный сервер с обратной связью:

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

Инструкции Transact-SQL, в которых в качестве имени сервера используется MyLink, формируют цикл через поставщика SQLNCLI и обратно к локальному серверу.

Связанные серверы с обратной связью нельзя использовать в распределенной транзакции. Попытка направить распределенный запрос в связанный сервер с обратной связью из распределенной транзакции приводит к ошибке, например ошибке 3910: «Контекст транзакции [Microsoft][ODBC SQL Server Driver][SQL Server] используется другим сеансом». Это ограничение неприменимо, если инструкция INSERT...EXECUTE, выданная соединением, для которого не включен режим MARS, выполняется к связанному серверу с замыканием на себя. Обратите внимание, что ограничение по-прежнему действует, если для соединения включен режим MARS.