it-swarm.com.de

Wie behebe ich Fehler 26: "Fehler beim Auffinden des angegebenen Servers / der angegebenen Instanz"

Ich versuche, TCP Zugriff auf meine SQL Server-Instanz (SQL2012)) zu konfigurieren. Ich verwende Management Studio, um eine Verbindung zum Datenbankmodul herzustellen. Ich gebe den Servernamen ein: "tcp: localhost\SQL2012 "und ich erhalte diese Fehlermeldung:

(Anbieter: SQL Network Interfaces, Fehler: 26 - Fehler beim Auffinden des angegebenen Servers/der angegebenen Instanz)

Dieser Beitrag vom SQL Server-Team scheint wirklich nützlich zu sein. Darin schlagen sie vor, den SqlBrowser-Dienst mit PortQry zu testen. Wenn ich das tue, bekomme ich folgende Informationen:

Querying target system called:

 localhost

Attempting to resolve name to IP address...


Name resolved to 127.0.0.1

querying...

UDP port 1434 (ms-sql-m service): LISTENING or FILTERED

Sending SQL Server query to UDP port 1434...

Server's response:

ServerName MSWART7
InstanceName SQL2012
IsClustered No
Version 11.0.5058.0
tcp 52329

   ♥K   K P☺K 5 - 2 1 qK 1 4  rK 8 7 0☺    1 qK

==== End of SQL Server query response ====

Und natürlich kann ich eine Verbindung zur Datenbank herstellen, wenn ich den Servernamen "tcp: localhost, 52329" angebe.

Ich bin mir nicht sicher, was ich vermisse. Der SQL-Browser scheint zu funktionieren und Ports und Firewalls scheinen offen oder irrelevant zu sein (ich versuche, eine Verbindung zu localhost herzustellen).

Wo schaue ich als nächstes hin?

6
Michael J Swart

Wenn Sie versuchen, eine Verbindung zu einer lokalen Instanz herzustellen, versucht SQL Server immer, Shared Memory zu verwenden. Diese Verbindung funktioniert einwandfrei:

localhost\SQL2012

Dies funktioniert in meinem Szenario, und die Verbindung verwendet in diesem Fall tatsächlich Shared Memory.

SELECT session_id,net_transport,local_net_address,local_tcp_port
FROM sys.dm_exec_connections;

Ergebnisse:

session_id  net_transport   local_net_address   local_tcp_port
----------  -------------   -----------------   --------------
53          Shared memory   <local machine>     NULL

Wenn Sie versuchen möchten, den gemeinsam genutzten Speicher zu überschreiben (nicht sicher, warum, auf einem lokalen Computer) und stattdessen TCP/IP erzwingen möchten, können Sie dies nicht mit der expliziten Angabe der benannten Instanz mischen, zumindest in allen von mir versuchten Fällen (kein Wortspiel beabsichtigt) ). Die benannte Instanz zwingt SQL Server, den Instanznamen mithilfe des SQL Server-Browsers der Portnummer zuzuordnen. Dies ist jedoch anscheinend nicht möglich, wenn Sie TCP/IP an erster Stelle erzwingen (der springende Punkt bei der Verwendung von TCP/IP ist dies Sie gehen direkt zum Port und kümmern sich nicht um den Browser. Wenn Ihre benannte Instanz zufällig auf ihrer eigenen IP-Adresse ausgeführt und auf Port 1433 gezwungen wird, können Sie dies möglicherweise zum Laufen bringen. Möglicherweise können Sie es auch zum Laufen bringen, wenn Sie einen Client-Netzwerk-Alias ​​verwenden (aber ich konnte nicht ).

Ich konnte eine Verbindung herstellen, wenn ich den aktuellen dynamischen Port, der dieser Instanz zugewiesen wurde, in Configuration Manager nachgeschlagen habe (in meinem Fall 49538), und dann eine Verbindung mit tcp:localhost,49538 Herstellen:

Object Explorer with two connections, one shared memory and one TCP/IP

Also jetzt:

SELECT session_id,net_transport,local_net_address,local_tcp_port
FROM sys.dm_exec_connections;

Ergebnisse:

session_id  net_transport   local_net_address   local_tcp_port
----------  -------------   -----------------   --------------
53          Shared memory   <local machine>     NULL
54          TCP             10.211.55.10        49538 

Alle Variationen, die ich versucht habe - über mehrere Computer und Versionen hinweg -, bei denen ich versucht habe, eine benannte Instanz mit überschreibendem gemeinsam genutztem Speicher zu kombinieren und stattdessen TCP/IP zu verwenden, haben denselben Fehler ergeben, den Sie erhalten haben. Dies ist sowohl der Fall, wenn ich dem Server-/Instanznamen tcp: Vorangestellt habe, als auch, wenn ich im Dialogfeld Verbindungseigenschaften TCP/IP für das Netzwerkprotokoll angegeben habe.

Lange Rede, kurzer Sinn: Wenn Sie TCP/IP für eine lokale Verbindung wirklich erzwingen müssen, müssen Sie für diese Instanz einen festen Port verwenden und den Port angeben. Oder verwenden Sie 1433 (was nur funktioniert, wenn es keine Standardinstanz gibt oder wenn Sie eine dedizierte IP-Adresse für diese Instanz haben), dann müssen Sie den Port nicht angeben, aber Sie müssen immer noch den tcp: Präfix oder verwenden Sie diese Option im Verbindungsdialog.

Ich empfehle nicht, Shared Memory zu deaktivieren. FWIW.

4
Aaron Bertrand