it-swarm.com.de

Warum kann ich keine Verbindung zur gemeinsam genutzten SQL Server 2017 LocalDB-Instanz herstellen?

Also habe ich in den letzten Tagen damit zu kämpfen. Ich kann keine Verbindung zu einer gemeinsam genutzten SQL Server 2017 (14.0.1000.169) LocalDB - Instanz herstellen. Ich habe im ganzen Internet gesucht und gelesen, warum, konnte aber keine Antwort finden, die funktionierte.

Ich habe es auf einem Laptop versucht, auf dem zuvor SQL Server Express und Dinge installiert waren, die ich alle deinstalliert habe. Und auch auf einer frischen Win10 VM.

Beide haben immer den gleichen Fehler:

Sqlcmd: Fehler: Microsoft ODBC Treiber 17 für SQL Server: Named Pipes-Anbieter: Verbindung zu SQL Server konnte nicht hergestellt werden [2].

SQLqd: Fehler: Microsoft ODBC Treiber 17 für SQL Server: Anmeldezeitlimit abgelaufen.

SQLqd: Fehler: Microsoft ODBC Treiber 17 für SQL Server: Beim Herstellen einer Verbindung zu SQL Server ist ein netzwerkbezogener oder instanzspezifischer Fehler aufgetreten. Server wurde nicht gefunden oder ist nicht verfügbar. Überprüfen Sie, ob Der Instanzname ist korrekt und wenn SQL Server so konfiguriert ist, dass Remoteverbindungen zugelassen werden. Weitere Informationen finden Sie in den SQL Server-Onlinedokumenten.

Dieser Fehler stammt von SQLCMD, aber ich habe es auch mit SSMS oder Visual Studio-Verbindungszeichenfolge versucht.

Ich habe versucht, eine Verbindung mit dem Eigentümer der Instanz herzustellen, konnte dies jedoch nicht. Auch mit einem SQL Login mit sysadmin richtig versucht und konnte nicht.

Ich kann mich nur mit dem Pipe-Namen verbinden.

Ich habe auch alles von diesen Links versucht

https://stackoverflow.com/questions/10214688/why-cant-i-connect-to-a-sql-server-2012-localdb-shared-instance

und

https://social.msdn.Microsoft.com/Forums/sqlserver/en-US/1257bf26-6ab0-416d-bf26-34f128f42248/sql-2016-sp1-sqllocaldb-versions-errors-with-quotwindows- api-call-quotreggetvaluewquot? forum = sqlexpress

Warum kann ich keine Verbindung herstellen?

5
Leojet

Scheint ein Fehler in LocalDb v2017 und höher zu sein. Ich habe alle verfügbaren Versionen ab Version 2012 SP4 getestet. Bis einschließlich v2016 SP2 wird der Anzeigename "(localdb)\.\SHAREDNAME" in der Verbindungsanforderung akzeptiert. Bei Verwendung von v2017 oder höher führt die Anforderung immer zu einem Fehler "Instanz nicht gefunden".

Ich habe auch festgestellt, dass das Abfragen aller installierten LocalDb-Versionen mit sqllocaldb.exe v Zu einer Fehlermeldung für Version 2016 und höher führt:

Der Windows-API-Aufruf "RegGetValueW" gab den Fehlercode 0 zurück.

Ich bin nicht sicher, ob dieses Verhalten mit dem ursprünglichen Problem zusammenhängt.


[~ # ~] Update [~ # ~]

Durch Anwenden des in der Frage verknüpften Registrierungsfixes wird die Versionsabfrage gelöst.

Nach einigem weiteren Graben habe ich möglicherweise die Ursache für den Verbindungsfehler entdeckt. Wenn SQLLocalDb bis v2016 auf dem lokalen Computer installiert ist, funktioniert die Freigabefunktion wie folgt:

In der Registrierung wird in Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server Local DB\Shared Instances\{SharedName} Ein neuer Schlüssel erstellt. Dieser Schlüssel enthält einen Zeichenfolgenwert InstanceName, in dem der Pipe-Name gespeichert ist, wie im folgenden Screenshot dargestellt:

(enter image description here

Wenn die entsprechende Instanz gestartet wird, wählt sie immer diesen Pipe-Namen aus. Der Name bleibt dauerhaft, d. H. Wenn die Instanz neu gestartet wird, wird der Pipe-Name wiederverwendet.

Diese Logik wird zerstört, wenn LocalDb v2017 oder höher installiert wird: Wenn eine Instanz mit einem gemeinsamen Namen gestartet wird, wird der Pipe-Name in der Registrierung ignoriert. Stattdessen wird beim Abfragen der Instanz über sqllocaldb i {instance} Ein völlig anderer Pipe-Name angezeigt.

Dies ist wahrscheinlich auch der Grund, warum die Verbindung nicht hergestellt werden kann, da die Pipe-Namen nicht übereinstimmen. Durch Bearbeiten des Registrierungswerts an den tatsächlichen Pipe-Namen wird das Problem behoben, jedoch nur bis die Instanz neu gestartet wird.

2
Aurora