409 Stimmen

Aktivieren Sie Remoteverbindungen für SQL Server Express 2012

Ich habe gerade SQL Server Express 2012 auf meinem Heimserver installiert. Ich versuche, von Visual Studio 2012 von meinem Desktop-PC darauf zuzugreifen, und erhalte wiederholt den bekannten Fehler:

Beim Herstellen einer Verbindung mit SQL Server ist ein netzwerkbezogener oder instanzspezifischer Fehler aufgetreten. Der Server wurde nicht gefunden oder war nicht zugänglich. Stellen Sie sicher, dass der Instanzname korrekt ist und dass SQL Server so konfiguriert ist, dass Remoteverbindungen zulässig sind. (Anbieter: Named Pipes Provider, Fehler: 40 - Die Verbindung mit SQL Server konnte nicht geöffnet werden)

Was ich versucht habe, um das zu beheben:

  • Führen Sie den SQL Server-Konfigurations-Manager auf dem Server aus und aktivieren Sie den SQL Server-Browser
  • Fügen Sie eine Windows-Firewall-Ausnahme auf dem Server für TCP, Ports 1433 und 1434 im lokalen Subnetz hinzu.
  • Überprüfen Sie, ob ich auf der SQL Server-Instanz ein Login für den Benutzer habe, mit dem ich mich auf dem Desktop angemeldet habe.
  • Überprüfen Sie, ob ich Windows-Authentifizierung auf der SQL Server-Instanz verwende.
  • Starten Sie SQL Server und den gesamten verdammten Server wiederholt neu.
  • Ziehen Sie mir all meine Haare aus.

Wie kann ich SQL Server 2012 Express dazu bringen, Remoteverbindungen zuzulassen!?

7 Stimmen

Ich löste das Problem, indem ich den SQL Server Browser-Dienst aktiviert habe :D. Danke fürs Posten.

1 Stimmen

Das Entsperren des 1433 UDP-Ports hat mir geholfen!

1 Stimmen

Und wenn Sie eine Azure-VM verwenden, vergessen Sie nicht, den Port auch über das Azure-Verwaltungsportal zu öffnen (das als äußere Firewall für die eigene Firewall der VM dient...). Wie folgt: stackoverflow.com/questions/34251382/…

3voto

BateTech Punkte 5472

Ich hatte das gleiche Problem mit SQL Server 2014 lokal installierter named Instance. Die Verbindung über FQDN\Instanzname scheiterte, während die Verbindung über nur meinen hostname\Instanzname funktionierte. Zum Beispiel funktionierte die Verbindung über meincomputername\sql2014, aber über meincomputername.mydomain.org\sql2014 nicht. DNS wurde richtig aufgelöst, TCP/IP war im SQL-Konfigurations-Manager aktiviert, Windows Firewall-Regeln wurden hinzugefügt (und dann die Firewall zum Testen ausgeschaltet, um sicherzustellen, dass sie nichts blockiert), aber keines davon hat das Problem behoben.

Schließlich musste ich den "SQL Server Browser" Dienst auf dem SQL Server starten, und das hat das Konnektivitätsproblem behoben.

Ich hatte nie realisiert, dass der SQL Server Browser Dienst tatsächlich dem SQL Server bei Verbindungen hilft; ich war der Meinung, dass er einfach nur die Dropdowns beim Klicken auf "Nach weiteren Servern suchen" füllte, aber tatsächlich hilft er, Client-Anfragen mit der korrekten Portnummer abzugleichen, die verwendet werden soll, wenn die Portnummer nicht explizit zugewiesen ist (ähnlich wie Bindungen von Websites das gleiche Problem auf einem IIS-Webserver lösen, der mehrere Websites hostet).

Dieser Verbindungspunkt hat mir den Hinweis zum SQL Server Browser Dienst gegeben: https://connect.microsoft.com/SQLServer/feedback/details/589901/unable-to-connect-on-localhost-using-fqdn-machine-name

  • Wenn Sie wstst05\sqlexpress als Servernamen verwenden, trennt der Client-Code den Computernamen vom Instanznamen und der wstst05 wird mit dem NetBIOS-Namen verglichen. Ich sehe kein Problem, dass sie übereinstimmen und die Verbindung als lokal betrachtet wird. Von dort aus wird die erforderliche Information abgerufen OHNE SQL Browser zu kontaktieren und es wird eine Verbindung zur SQL-Instanz über Shared Memory hergestellt, ohne Probleme zu haben.
  • Wenn Sie wstst05.capatest.local\sqlexpress verwenden, schlägt der Client-Code den Vergleich des Namens (wstst05.capatest.local) mit dem NetBIOS-Namen (wstst05) fehl und betrachtet die Verbindung als "remote". Das ist so vorgesehen und wir werden auf jeden Fall daran arbeiten, dies in Zukunft zu verbessern. Wie auch immer, aufgrund der Betrachtung der Verbindung als remote und der Tatsache, dass es sich um eine named Instanz handelt, entscheidet der Client, dass er den SQLBrowser zur Namensauflösung verwenden muss. Er versucht, den SQL Browser auf wstst05.capatest.local (UDP-Port 1434) zu kontaktieren, und offensichtlich scheitert dieser Teil. Daher der Fehler, den Sie erhalten.

Der Grund für den "SQL Server Browser" Dienst von TechNet (von mir hervorgehoben): https://technet.microsoft.com/de-de/library/ms181087(v=sql.120).aspx

Aus dem Abschnitt "Verwenden des SQL Server Browsers":

Wenn der SQL Server Browser Dienst nicht läuft, können Sie immer noch eine Verbindung zum SQL Server herstellen, wenn Sie die richtige Portnummer oder Named Pipe angeben. Sie können sich beispielsweise mit der Standardinstanz von SQL Server mit TCP/IP verbinden, wenn sie auf Port 1433 läuft. Wenn der SQL Server Browser Dienst jedoch nicht läuft, funktionieren die folgenden Verbindungen nicht:

  • Jedes Element, das versucht, sich mit einer named Instanz zu verbinden, ohne alle Parameter vollständig anzugeben (wie den TCP/IP-Port oder named Pipe).
  • Jedes Element, das Server\Instanz-Informationen generiert oder übergibt, die später von anderen Komponenten verwendet werden können, um erneut eine Verbindung herzustellen.
  • Verbinden mit einer named Instanz, ohne die Portnummer anzugeben oder Pipe.
  • DAC mit einer named Instanz oder der Standardinstanz, wenn nicht der TCP/IP-Port 1433 verwendet wird.
  • Der OLAP-Umleitungs-Dienst.
  • Auflisten von Servern in SQL Server Management Studio, Enterprise Manager oder Query Analyzer.

Wenn Sie SQL Server in einem Client-Server-Szenario verwenden (zum Beispiel, wenn Ihre Anwendung auf SQL Server über ein Netzwerk zugreift), wenn Sie den SQL Server Browser Dienst anhalten oder deaktivieren, müssen Sie jeder Instanz eine bestimmte Portnummer zuweisen und Ihren Client- Anwendungscode schreiben, um immer diese Portnummer zu verwenden. Dieser Ansatz hat folgende Probleme:

  • Sie müssen den Client-Anwendungscode aktualisieren und warten, um sicherzustellen, dass er mit dem richtigen Port verbunden ist.
  • Der Port, den Sie für jede Instanz auswählen, kann von einem anderen Dienst oder einer anderen Anwendung auf dem Server verwendet werden, was dazu führt, dass die Instanz von SQL Server nicht verfügbar ist.

Und weitere Informationen aus demselben Artikel aus dem Abschnitt "Wie SQL Server Browser funktioniert":

Weil nur eine Instanz von SQL Server einen Port oder eine Pipe verwenden kann, werden unterschiedliche Portnummern und Pipe-Namen für named Instanzen zugewiesen, einschließlich SQL Server Express. Standardmäßig, wenn aktiviert, sind benannte Instanzen und SQL Server Express so konfiguriert, dynamische Ports zu verwenden, d.h. ein verfügbarer Port wird zugewiesen, wenn SQL Server startet. Wenn gewünscht, kann einer Instanz von SQL Server ein spezifischer Port zugewiesen werden. Beim Verbinden können Clients einen spezifischen Port angeben; aber wenn der Port dynamisch zugewiesen wird, kann sich die Portnummer jederzeit ändern, wenn SQL Server neu gestartet wird, sodass die richtige Portnummer dem Client unbekannt ist. ... Wenn SQL Server-Clients auf SQL Server-Ressourcen zugreifen, sendet die Client-Netzwerkbibliothek eine UDP-Nachricht an den Server über Port 1434. Der SQL Server Browser antwortet mit dem TCP/IP-Port oder der Named Pipe der angeforderten Instanz. Die Netzwerkbibliothek der Client-Anwendung schließt dann die Verbindung ab, indem sie eine Anforderung an den Server sendet über den Port oder die Named Pipe der gewünschten Instanz

3voto

dynamiclynk Punkte 2134

Ich musste den Port über den Konfigurationsmanager hinzufügen und die Portnummer in meiner SQL-Verbindung hinzufügen [host]\[db Instanzname],1433

Beachten Sie das , (Komma) zwischen Instanzname und Port

1voto

Matt Burrell Punkte 320

Noch etwas, das überprüft werden muss, ist dass Sie den benannten Instanznamen korrekt geschrieben haben!

Dieser Artikel ist sehr hilfreich bei der Problembehebung von Verbindungsproblemen: Wie man eine Verbindung zum SQL Server-Datenbank-Engine diagnostiziert

1voto

MasterMastic Punkte 19896

Ich hatte ein anderes Problem als alle bisher genannten Antworten!

Ich sollte erwähnen, dass ich es in Visual Studio hatte und nicht in SQL Server Express, aber die Lösung sollte genau die gleiche sein.

Nun, Gott, es ist eigentlich wirklich einfach und vielleicht ein bisschen töricht. Als ich versuchte, eine Datenbank zu erstellen und Visual Studio den Namen des SQL-Servers vorschlug, gab es mir meinen Windows-Benutzernamen und da es tatsächlich der Name des Servers war, entschied ich mich dafür.

In Wirklichkeit war es eigentlich mein Windows-Benutzername + \SQLEXPRESS. Wenn Sie keine Einstellungen geändert haben, ist dies wahrscheinlich auch Ihrer. Wenn es funktioniert, hören Sie auf zu lesen; das ist meine Antwort. Wenn es nicht funktioniert, ist vielleicht der Name anders.

Wenn Sie, wie ich, dieses Problem nur in Visual Studio hatten, überprüfen Sie, was Ihrer ist, indem Sie diese Schritte befolgen:

  1. Öffnen Sie SQL Server Management Studioicon.
  2. Wenn Sie Ihren Server nicht sehen (standardmäßig links angedockt), drücken Sie <strong>F8</strong> oder gehen Sie zu Ansicht -> Objekt-Explorer.
  3. Klicken Sie mit der rechten Maustaste auf den Namen des Servers und wählen Sie Eigenschaften (Der letzte Punkt)
  4. Unten links können Sie den tatsächlichen Namen Ihres Servers unter "Server" sehen (nicht Verbindung, sondern darüber).

Dies ist der Name des Servers und dies ist, mit dem Sie versuchen sollten, sich zu verbinden! nicht das, was Visual Studio vorschlägt!

1voto

Tomas Kubes Punkte 21732

In meinem Fall lief die Datenbank auf einem nicht standardmäßigen Port. Überprüfen Sie, ob der Port, mit dem Sie verbunden sind, derselbe ist wie der Port, auf dem die Datenbank läuft. Wenn es mehrere Instanzen von SQL Server gibt, überprüfen Sie die richtige.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X