Verfügbarkeitsreplikat ist in einer Always On-Verfügbarkeitsgruppe getrennt

Gilt für:SQL Server

Einführung

  • Richtlinienname: Verbindungsstatus des Verfügbarkeitsreplikats
  • Problem: Das Verfügbarkeitsreplikat wurde getrennt.
  • Kategorie:Kritisch
  • Facet: Verfügbarkeitsreplikat

BESCHREIBUNG

Diese Richtlinie überprüft den Verbindungsstatus zwischen Verfügbarkeitsreplikaten. Die Richtlinie befindet sich in einem fehlerhaften Zustand, wenn der Verbindungsstatus des Verfügbarkeitsreplikats DISCONNECTED lautet. Die Richtlinie befindet sich andernfalls in einem ordnungsgemäßen Zustand.

Mögliche Ursachen

Das sekundäre Replikat ist nicht mit dem primären Replikat verbunden. Der Verbindungsstatus lautet DISCONNECTED. Dieses Problem kann folgende Ursachen haben:

  • Für den Verbindungsport besteht ein Konflikt mit einer anderen Anwendung.

  • Der Verschlüsselungstyp oder der Algorithmus stimmt nicht überein.

  • Der Verbindungsendpunkt wurde gelöscht oder nicht gestartet.

  • Es bestehen Netzwerk-/Konnektivitätsprobleme oder Ports werden an der Firewall blockiert.

  • Dienst-/Startkonto ist kein Domänenbenutzer und kann keine Verbindung mit dem DC und mit dem Remoteknoten und -port herstellen (z. B. 5022).

Mögliche Lösungen

Überprüfen Sie die Datenbankspiegelungs-Endpunktkonfiguration für die Instanzen des primären und sekundären Replikats, und aktualisieren Sie die nicht übereinstimmende Konfiguration. Überprüfen Sie außerdem, ob für den Port ein Konflikt besteht, und ändern Sie ggf. die Portnummer.

Für dieses Problem gibt es die folgenden möglichen Lösungen:

  • Für den Verbindungsport besteht ein Konflikt mit einer anderen Anwendung.

    Führen Sie die folgenden Befehle aus, um das Portproblem zu diagnostizieren:

    $server_name = "server_instance"  #replace with your SQL Server instance
    Sqlcmd -S $server_name -E -Q "SELECT type_desc, port FROM sys.tcp_endpoints WHERE type_desc = 'DATABASE_MIRRORING'; "
    

    Mit dem obigen Befehl wird die Portnummer zurückgegeben, die Sie im folgenden Befehl verwenden müssen.

    $port = "5022"
    Get-NetTCPConnection -LocalPort $port
    Get-Process -Id (Get-NetTCPConnection -LocalPort $port).OwningProcess |Select-Object Name, ProductVersion, Path, Id
    
  • Der Verschlüsselungstyp oder der Algorithmus stimmt nicht überein.

    Führen Sie dies auf beiden Servern aus, vergleichen Sie die Verschlüsselung, und stellen Sie sicher, dass beide identisch sind:

    $server_name = "server_instance"  #replace with your SQL Server instance
    sqlcmd -S $server_name -E -Q "SELECT name, state_desc, encryption_algorithm_desc, protocol_desc, type_desc  FROM sys.database_mirroring_endpoints"
    
  • Der Verbindungsendpunkt wurde gelöscht oder nicht gestartet.

    Führen Sie den folgenden Befehl aus, wenn der Spiegelungsendpunkt beendet wird und gestartet wird.

    $server_name = "server_instance" #replace with your SQL Server instance
    Sqlcmd -S $server_name -E -Q "SELECT name, state_desc, encryption_algorithm_desc, protocol_desc, type_desc  FROM sys.database_mirroring_endpoints"
    

    Führen Sie den folgenden Befehl aus, wenn Sie vermuten, dass der Endpunkt nicht auf Verbindungen reagiert oder nicht ausgeführt wird.

    $server_name = "server_instance" #use your SQL Server instance here
    $server_name = "hadr_endpoint" #replace with your endpoint name
    Sqlcmd -S $server_name -E -Q "ALTER ENDPOINT hadr_endpoint STATE = stopped"
    Sqlcmd -S $server_name -E -Q "ALTER ENDPOINT hadr_endpoint STATE = started"
    

    Warnung

    Wenn Sie den Befehl STATE = stopped ausführen, wird Ihr Endpunkt beendet und der Always On-Datenverkehrsfluss vorübergehend unterbrochen.

  • Es bestehen Netzwerk-/Konnektivitätsprobleme, oder Ports werden an der Firewall blockiert.

    Verwenden Sie die folgenden Befehle, um die Konnektivität in beiden Richtungen von Node1 zu Node2 und von Node2 zu Node1 zu testen:

    $computer = $env:computername
    $port = "5022"                 # replace with the port from your database_mirroring_endpoints.
    Test-NetConnection -ComputerName $computer -Port $port 
    
  • Dienst-/Startkonto ist kein Domänenbenutzer und kann keine Verbindung mit dem DC und mit dem Remoteknoten und -port herstellen (z. B. 5022).

    Führen Sie die folgenden Schritte aus, um zu testen, ob das Dienstkonto eine Verbindung mit dem Remoteknoten herstellen kann. Die Schritte setzen voraus, dass Sie nicht mit dem Dienstkonto angemeldet sind:

    1. Wählen Sie Start> aus Windows PowerShell>, indem Sie mit der rechten Maustaste auf das Symbol klicken.

    2. Wählen Sie Weitere und >Als anderer Benutzer ausführen>Ein anderes Konto verwenden aus.

    3. Geben Sie den Dienstkontonamen und das Kennwort ein.

    4. Geben Sie nach dem Öffnen von Windows PowerShell den folgenden Befehl ein, um zu überprüfen, ob Sie sich mit dem Dienstkonto angemeldet haben:

      whoami
      
    5. Anschließend können Sie die Verbindung mit dem Remoteknoten testen. Beispiel:

      $computer = "remote_node" # Replace with Naode name as per your environment.
      $port = "5022"            # Replace with the port from your database_mirroring_endpoints.        
      Test-NetConnection -ComputerName $computer -Port 5022
      

Siehe auch