Considerazioni sui server collegati in un'installazione cluster di SQL Server

Se i server collegati sono configurati in un'installazione cluster di SQL Server con provider OLE DB non inclusi in SQL Server, verificare che i provider OLE DB siano installati in tutti i nodi del cluster. Le proprietà che definiscono il server collegato devono inoltre essere indipendenti dalla posizione, ovvero non devono includere informazioni basate sul presupposto che SQL Server sia sempre in esecuzione in un nodo specifico del cluster.

Nell'esempio seguente viene definito un server collegato per un server che esegue SQL Server e viene fatto riferimento a una delle tabelle remote specificando un nome in quattro parti in un'istruzione SELECT. (L'utilizzo di SQLNCLI e SQL Server reindirizza alla versione più recente del provider OLE DB SQL Server Native Client.)

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

Server collegati di loopback

È possibile definire un server collegato in modo che punti all'indietro (loopback) al server in cui è stato definito. I server di loopback risultano particolarmente utili durante il test di un'applicazione che utilizza query distribuite in una rete con un solo server.

Ad esempio, quando viene eseguita la stored procedure sp_addlinkedserver seguente in un server denominato MyServer viene definito un server collegato di loopback:

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

Le istruzioni Transact-SQL che utilizzano MyLink come nome del server passano attraverso il provider SQLNCLI e quindi tornano al server locale.

Non è possibile utilizzare server collegati di loopback in una transazione distribuita. Se si prova a eseguire una query distribuita in un server collegato di loopback all'interno di una transazione distribuita, viene generato un errore, ad esempio l'errore 3910: "[Microsoft][Driver ODBC SQL Server][SQL Server]Il contesto della transazione è in uso in un'altra sessione." Questa restrizione non si applica quando un'istruzione INSERT...EXECUTE, inviata da una connessione per cui MARS (Multiple Active Result Set) non è abilitato, viene eseguita in un server di loopback collegato. Si noti che la restrizione si applica comunque quando MARS è abilitato in una connessione.