Partager via


Remarques concernant les serveurs liés dans un serveur SQL ordonné en clusters

Lorsque des serveurs liés sont configurés dans un serveur cluster SQL Server sur des fournisseurs OLE DB non fournis avec SQL Server, vérifiez que les fournisseurs OLE DB sont installés dans tous les nœuds du cluster. En outre, toutes les propriétés qui définissent le serveur lié doivent être transparentes en ce qui concerne leur emplacement. Elles ne doivent pas comporter d'informations relatives indiquant que SQL Server fonctionne toujours sur un nœud spécifique du cluster.

L'exemple suivant définit un serveur lié sur un serveur exécutant SQL Server et fait référence à l'une des tables distantes en utilisant un nom à quatre éléments dans une instruction SELECT. (L'utilisation de SQLNCLI et SQL Server vous redirigera vers la version la plus récente du fournisseur SQL Server Native Client OLE DB.)

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

Serveurs liés en boucle

Les serveurs liés peuvent être définis de façon à repointer (en bouclage) vers le serveur sur lequel ils sont définis. Les serveurs en boucle sont particulièrement utiles pour tester une application utilisant des requêtes distribuées sur un réseau comportant un seul serveur.

Par exemple, l'exécution de la procédure stockée sp_addlinkedserver sur un serveur nommé MyServer définit un serveur lié en boucle :

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

Les instructions Transact-SQL qui utilisent MyLink comme nom de serveur s'exécutent en boucle par l'intermédiaire du fournisseur SQLNCLI, puis retournent vers le serveur local.

Les serveurs liés en boucle ne peuvent pas être utilisés dans une transaction distribuée. Si vous essayez d'exécuter une requête distribuée sur un serveur lié en boucle dans une transaction distribuée, vous obtiendrez une erreur, telle que l'erreur 3910 : « [Microsoft][Pilote ODBC SQL Server][Serveur SQL Server]Le contexte de transaction est utilisé par une autre session. » Cette restriction ne s'applique pas lorsqu'une instruction INSERT...EXECUTE, émise par une connexion pour laquelle MARS (Multiple Active Result Sets) n'est pas activé, s'exécute sur un serveur lié en boucle. Notez que la restriction s'applique lorsque MARS est activé sur une connexion.