it-swarm.com.de

Der Name der SQL-Instanz wurde auf dem Netzwerk-PC nicht gefunden

Ich habe mich schon ein Dutzend Mal mit dieser Art von Situation konfrontiert und möchte schließlich eine dauerhafte Lösung dafür.

Problem

Der SQL-Instanzname des Server-PCs kann auf dem Client-PC nicht gefunden werden.

Hinweis : - Ich habe SQL Express und Management Studio sowohl auf dem Server als auch auf dem Client installiert
Server-PC-Name : M-PC
Server SQL Version : SQL Server 2008
Client-PC-Name : SHIVANG
Client-SQL-Version : SQL Server 2008

Client-PC SQL Server Screenshot  

Lösung, die ich versucht habe

1) Firewall ausschalten von Server und Client-PC vollständig (Domain, Private & Public)
2) Aktivieren und Neustarten der Dienste: SQL Server und Browser Service  enter image description here 3) Aktivieren der SQL-Netzwerkkonfigurationseinstellungen  enter image description here 4) Aktiviert auch "Remoteverbindung zulassen" von SQL Server auf beiden PCs
5) Die Vernetzung zwischen beiden PCs ist perfekt. Sie können über das Netzwerk beider PCs auf Dateien zugreifen.
6) Sogar die IP-Konfigurationseinstellungen des PCs wurden von "erhalten" auf "statisch" geändert (IP des Servers ist 192.168.1.41 und IP des Clients ist 192.168.1.44)  enter image description here
7) Ich habe SQL Express und Management Studio vollständig von Client und Server deinstalliert und erneut installiert.
8) Ich forderte meinen Client auch auf, den PC zu formatieren, und installierte dann SQL Express und Management Studio. Immer noch nichts.
9) Sie haben auf keinem der Systeme ein Virenschutzprogramm (um die Verbindung zu blockieren)

SPASS TEIL

Jetzt ist der spaßige Teil hier, während ich mit den Einstellungen des Klienten und des Bediener-PC spielte. Der Server-PC zeigte die SQL-Instanz des Client-PCs an, während der Client-PC die SQL-Instanz des Servers noch nicht finden konnte .

Das folgende Bild zeigt den SQL Server des Server-PCs
 enter image description here Das folgende Bild zeigt den SQL Server des Client-PCs
 enter image description here


Hier sind die folgenden Einstellungen, mit denen ich gespielt habe: -

  1. Geänderte IP vonBeziehenzuStatischauf beiden PCs (Client und Server)
  2. Das Protokoll: TCP/IP von SQL auf beiden PCs (Client und Server) wurde geändert. [Entschuldigung, ich habe vergessen, die Screenshots zu erhalten, und habe noch mehr damit herumgespielt, als der Server-PC die PC-SQL-Instanz des Clients nicht mehr zeigte.]

Jetzt habe ich keine Ahnung, was als nächstes zu tun ist, um dieses Problem zu lösen. Bitte helfen Sie mir, wenn Sie können.

Danke im Voraus

14
Agent_Spock

Es gibt zwei Sicherheitsstufen, die geändert werden müssen, um den Fernzugriff zu ermöglichen.

  1. SQL Server-Konfiguration: Standardmäßig ist in den Editionen Express, Developer und Enterprise Evaluation die Verbindung über das TCP/IP-Protokoll deaktiviert. Aktivieren Sie dies mithilfe von SQL Server Configuration Manager.
  2. Windows-Firewall: Die Deaktivierung der Firewall funktioniert zwar Für diese Komponente. Dies ist jedoch keine bewährte Sicherheitsmaßnahme (noch ist __. Erforderlich). (Hinweis: In diesem Abschnitt gehe ich von einer Standardkonfiguration von Aus. Es gibt viele Einstellungen, die geändert werden können. Diese Schritte wirken sich geringfügig auf diese Schritte aus.)

Je nach Typ der SQL Server-Instanz, zu der Sie eine Verbindung herstellen, gibt es zwei Fälle:

  1. Standardinstanz (nur Verbindung mit Computernamen herstellen). Fügen Sie eine zulässige -Eingangsregel entweder für TCP Port 1433 oder zum Datenbank-Engine-Service . hinzu.
  2. Benannte Instanz (Verbindung über Computername + Instanzname). Fügen Sie am UDP-Port 1434 eine eingehende Regel hinzu, um auf den Dienst SQL Browser Zuzugreifen. Fügen Sie eine eingehende Zulassungsregel für den Datenbankmodul-Service hinzu.

10
Pradeep Kumar

Ich habe keine endgültige Antwort auf Ihre inkonsistenten Ergebnisse, aber ich habe einige Hintergrundinformationen, die Ihnen bei der Problembehebung helfen können.

SQL-Instanzen werden mit dem SQL Server Resolution-Protokoll aufgelistet. Hierbei handelt es sich um ein Protokoll auf Anwendungsebene, das UDP (nicht TCP) verwendet, um Aufzählungsanforderungen an Server im lokalen Subnetz zu senden und Antworten zu erhalten, wie im Kommunikationsfluss für das Erkennungsdiagramm für mehrere Instanzen gezeigt. Es sind die SQL Server-Browser-Dienste, die den UDP-Port 1434 überwachen, um Aufzählungsanforderungen zu verarbeiten. 

Wichtig ist, dass das UDP-Multicast-Protokoll nicht garantiert, dass Anforderungen oder Antworten übermittelt werden. Folglich kann ein Verlust auftreten, der nur von einer Netzwerkablaufverfolgung erkannt werden kann. Das SQL Server-Auflösungsprotokoll kann nicht wissen, warum keine Antwort empfangen wurde. Dies kann auf einen Serverausfall, ein Netzwerkproblem, eine Firewall, eine ausgeblendete SQL-Instanz usw. zurückzuführen sein. Da UDP-Multicast-Anforderungen nur an Geräte im lokalen Subnetz übermittelt werden, ist die Auflösung auf diese Computer beschränkt.

Das folgende PowerShell-Skript sendet eine UDP-Anforderung an einen bestimmten Host. Sie können dies ausführen, um sicherzustellen, dass der SQL Browser-Dienst mit den erwarteten Informationen zu den Instanzen auf dem Host antwortet.

Function List-Instances($hostName)
{

    Write-Host ("Retrieving information from SQL Server Browser service on Host $HostName ...");

    try
    {
        $udpClient = new-object Net.Sockets.UdpClient($HostName, 1434);
        $bufferLength =  1;
        $browserQueryMessage = new-object byte[] $bufferLength;
        $browserQueryMessage[0] = 2; # list all instances
        $bytesSent = $udpClient.Send($browserQueryMessage, $browserQueryMessage.Length);
        $udpClient.Client.ReceiveTimeout = 10000;
        $remoteEndPoint = new-object System.Net.IPEndPoint([System.Net.IPAddress]::Broadcast, 0);
        $browserResponse = $udpClient.Receive([ref]$remoteEndPoint);
        $payloadLength = $browserResponse.Length - 3;
        $browserResponseString = [System.Text.ASCIIEncoding]::ASCII.GetString($browserResponse, 3, $payloadLength);
        $browserResponseString
        $elements = $browserResponseString.Split(";");
        $elements
        $namedInstancePort = "";
        Write-Host "SQL Browser Data:" -ForegroundColor Green;
        $i = 0;
        while($i -lt $elements.Length)
        {
            if([String]::IsNullOrEmpty($elements[$i]))
            {
                Write-Host "";
                $i += 1;
            }
            else
            {
                Write-Host $("    " + $elements[$i] + "=" + $elements[$i+1]) -ForegroundColor Green;
                $i += 2;
            }
        }
    }
    catch [Exception]
    {
        Write-Host $("ERROR: " + $_.Exception.Message) -ForegroundColor Red;
    }

}

# send request to SQL Brower service to enumerate all SQL instances running on specific Host
List-Instances -hostName "SomeMachine";

Zusammenfassend erfordert eine erfolgreiche Lösung Folgendes:

  • Der SQL Server-Browserdienst muss ausgeführt werden
  • UDP-Port 1434 muss durch die Firewall zugelassen werden
  • Die Server müssen sich im selben Subnetz befinden
  • Kein UDP-Paketverlust
  • Die Server antworten zeitnah
0
Dan Guzman