Partilhar via


A réplica de disponibilidade está desconectada em um Grupo de Disponibilidade AlwaysOn

Aplica-se a: SQL Server

Introdução

  • Nome da Política: estado de conexão da réplica de disponibilidade
  • Problema: a réplica de disponibilidade está desconectada
  • Categoria: crítica
  • Faceta: réplica de disponibilidade

Descrição

Esta política verifica o estado da conexão entre as réplicas de disponibilidade. O estado da política é não íntegro quando o estado de conexão da réplica de disponibilidade é DISCONNECTED. Caso contrário, a política estará em um estado íntegro.

Possíveis causas:

A réplica secundária não está conectada à réplica primária. O estado de conectado é DISCONNECTED. Esse problema pode ser causado por um dos seguintes motivos:

Soluções possíveis

Verifique a configuração de ponto de extremidade de espelhamento de banco de dados para as instâncias da réplica primária e secundária e atualize a configuração incompatível. Além disso, verifique se a porta está em conflito e, em caso afirmativo, altere o número da porta.

Estas são as possíveis soluções para este problema:

A porta de conexão pode estar em conflito com outro aplicativo

Execute os seguintes comandos para diagnosticar o problema da porta:

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

O comando anterior retorna o número da porta que você precisa usar no comando a seguir.

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

O tipo ou algoritmo de criptografia são incompatíveis

Execute este comando em ambos os servidores, compare a criptografia e verifique se ambos são iguais.

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

O ponto de extremidade de conexão foi excluído ou não foi iniciado

Execute o comando a seguir se o ponto de extremidade de espelhamento sair e for iniciado.

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

Execute o comando a seguir se suspeitar que o ponto de extremidade não está respondendo a conexões ou não está em execução.

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

Aviso

Executar o comando com STATE = stopped vai parar o ponto de extremidade e interromper temporariamente o fluxo de tráfego do Always On.

Há problemas de rede/conectividade ou portas estão bloqueadas no firewall

Use os seguintes comandos para testar a conectividade em ambas as direções, de Node1 para Node2 e Node2 para 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

A conta não é um usuário de domínio e não pode se conectar ao DC e ao nó remoto

Para testar se a conta de serviço pode se conectar ao nó remoto, siga estas etapas. As etapas pressupõem que você não esteja conectado com a conta de serviço.

  1. Selecione Iniciar>Windows PowerShell> e clique com o botão direito do mouse no ícone.

  2. Selecione Mais>Executar como outro usuário>Usar outra conta.

  3. Digite o nome e a senha da conta de serviço.

  4. Depois que o Windows PowerShell for aberto, digite o seguinte comando para verificar se você iniciou sessão com a conta de serviço:

    whoami
    
  5. Em seguida, você pode testar a conexão com o nó remoto, conforme mostrado no exemplo a seguir.

    $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