Freigeben über


Überlegungen zu Verbindungsservern in einer SQL Server-Clusterkonfiguration

Wenn Verbindungsserver in einem gruppierten SQL Server über OLE DB-Anbieter, die nicht zum Lieferumfang von SQL Server gehören, konfiguriert werden, sollten Sie sicherstellen, dass die OLE DB-Anbieter in allen Knoten des Clusters installiert werden. Außerdem sollten Eigenschaften, die den Verbindungsserver definieren, standortunabhängig sein; sie sollten keine Informationen enthalten, in denen davon ausgegangen wird, dass SQL Server immer auf einem bestimmten Knoten des Clusters ausgeführt wird.

Das folgende Beispiel definiert einen Verbindungsserver für einen Server, auf dem SQL Server ausgeführt wird, und verweist mithilfe eines vierteiligen Namens in einer SELECT-Anweisung auf eine der Remotetabellen. (Wenn Sie SQLNCLI verwenden, leitet SQL Server zur neuesten Version des OLE DB-Anbieters von SQL Server Native Client um.)

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

Loopback-Verbindungsserver

Verbindungsserver können so definiert werden, dass sie auf den Server, auf dem sie definiert sind, zurückzeigen (zurücklaufen = loop back). Loopbackserver sind sehr nützlich, um eine Anwendung, die verteilte Abfragen verwendet, in einem Netzwerk mit einem einzelnen Server zu testen.

So wird z. B. durch das Ausführen der gespeicherten Prozedur sp_addlinkedserver auf einem Server namens MyServer ein Loopback-Verbindungsserver definiert:

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

Transact-SQL-Anweisungen, die MyLink als Servernamen verwenden, durchlaufen die Schleife durch den SQLNCLI-Anbieter und zurück zum lokalen Server.

Loopback-Verbindungsserver können in einer verteilten Transaktion nicht verwendet werden. Wenn versucht wird, eine verteilte Abfrage für einen Loopback-Verbindungsserver in einer verteilten Transaktion auszuführen, löst dies einen Fehler, wie den Fehler 3910, aus: "[Microsoft] [ODBC SQL Server-Treiber] [SQL Server] Der Transaktionskontext wird von einer anderen Sitzung verwendet." Diese Einschränkung gilt nicht, wenn eine INSERT...EXECUTE-Anweisung, die von einer Verbindung ausgegeben wurde, für die Multiple Active Result Sets (MARS) nicht aktiviert ist, für einen Loopback-Verbindungsserver ausgeführt wird. Beachten Sie, dass die Einschränkung weiterhin gilt, wenn MARS für eine Verbindung aktiviert wird.