Udostępnij za pośrednictwem


Replika dostępności jest rozłączona w grupie dostępności zawsze włączonych usług

Dotyczy: SQL Server

Wprowadzenie

  • Nazwa zasad: Stan połączenia repliki dostępności
  • Problem: Replika dostępności jest rozłączona
  • Kategoria: Krytyczne
  • Aspekt: replika dostępności

Opis

Te zasady sprawdzają stan połączenia między replikami dostępności. Zasady są w złej kondycji, gdy stan połączenia repliki dostępności to DISCONNECTED. Zasady są w przeciwnym razie w dobrej kondycji.

Możliwe przyczyny

Replika pomocnicza nie jest połączona z repliką podstawową. Stan połączenia to DISCONNECTED. Ten problem może być spowodowany jedną z następujących przyczyn:

Możliwe rozwiązania

Sprawdź konfigurację punktu końcowego dublowania bazy danych dla wystąpień repliki podstawowej i pomocniczej oraz zaktualizuj niezgodną konfigurację. Sprawdź również, czy port jest w konflikcie, a jeśli tak, zmień numer portu.

Poniżej przedstawiono możliwe rozwiązania tego problemu:

Port połączenia może być w konflikcie z inną aplikacją

Uruchom następujące polecenia, aby zdiagnozować problemy z portem:

$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'; "

Poprzednie polecenie zwraca numer portu, którego należy użyć w poniższym poleceniu.

$port = "5022"
Get-NetTCPConnection -LocalPort $port
Get-Process -Id (Get-NetTCPConnection -LocalPort $port).OwningProcess | Select-Object Name, ProductVersion, Path, Id

Typ lub algorytm szyfrowania jest niezgodny

Uruchom to polecenie na obu serwerach i porównaj szyfrowanie i upewnij się, że oba są takie same.

$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"

Punkt końcowy połączenia został usunięty lub nie został uruchomiony

Uruchom następujące polecenie, jeśli punkt końcowy dublowania zakończy działanie i zostanie uruchomiony.

$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"

Uruchom następujące polecenie, jeśli podejrzewasz, że punkt końcowy nie odpowiada na połączenia lub nie jest uruchomiony.

$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"

Ostrzeżenie

Uruchomienie polecenia z STATE = stopped poleceniem spowoduje zatrzymanie punktu końcowego i tymczasowe przerwanie przepływu ruchu Zawsze włączone.

Problemy z siecią lub łącznością lub porty są blokowane w zaporze

Użyj następujących poleceń, aby przetestować łączność w obu kierunkach od Node1 do i Node2Node2 do Node1:

$computer = "remote_node"      # replace with node name in your environment
$port = "5022"                 # replace with the port from your database_mirroring_endpoints
Test-NetConnection -ComputerName $computer -Port $port

Konto nie jest użytkownikiem domeny i nie może nawiązać połączenia z kontrolerem domeny oraz z węzłem zdalnym

Aby sprawdzić, czy konto usługi może nawiązać połączenie z węzłem zdalnym, wykonaj następujące kroki. W krokach założono, że nie zalogowano się przy użyciu konta usługi.

  1. Wybierz pozycję Uruchom program>Windows PowerShell> prawym przyciskiem myszy ikonę.

  2. Wybierz pozycję Więcej>uruchom jako inny użytkownik>Użyj innego konta.

  3. Wpisz nazwę konta usługi i hasło.

  4. Po uruchomieniu programu Windows PowerShell wpisz następujące polecenie, aby sprawdzić, czy zalogowaliśmy się przy użyciu konta usługi:

    whoami
    
  5. Następnie możesz przetestować połączenie z węzłem zdalnym, jak w poniższym przykładzie.

    $computer = "remote_node" # replace with node name in your environment
    $port = "5022"            # replace with the port from your database_mirroring_endpoints
    Test-NetConnection -ComputerName $computer -Port $port