Partilhar via


Solucionar problemas de ligação - Instância SQL Gerida do Azure

Aplica-se a:Instância Gerenciada SQL do Azure

Este artigo ensina como monitorizar e solucionar problemas com um link de entre o SQL Server e o Azure SQL Managed Instance.

Você pode verificar o estado do link com o Transact-SQL (T-SQL), o Azure PowerShell ou a CLI do Azure. Se você encontrar problemas, você pode usar os códigos de erro para solucionar o problema.

Muitos problemas com a criação do link podem ser resolvidos verificando o de rede entre as duas instâncias e validando o ambiente de foi devidamente preparado para o link.

Semeadura inicial

Ao estabelecer um vínculo entre o SQL Server e a Instância Gerenciada do SQL do Azure, há uma fase inicial de propagação antes do início da replicação de dados. A fase inicial de semeadura é a parte mais longa e cara da operação. Quando a propagação inicial é concluída, os dados são sincronizados e apenas as alterações de dados subsequentes são replicadas. O tempo necessário para a conclusão da propagação inicial depende do tamanho dos dados, da intensidade da carga de trabalho nos bancos de dados primários e da velocidade do link entre as redes das réplicas primária e secundária.

Se a velocidade da ligação entre as duas instâncias for mais lenta do que o necessário, é provável que o tempo de inicialização seja perceptivelmente afetado. Você pode usar a velocidade de propagação declarada, o tamanho total dos dados e a velocidade do link para estimar quanto tempo a fase inicial de propagação levará antes que a replicação de dados seja iniciada. Por exemplo, para um único banco de dados de 100 GB, a fase inicial de propagação levaria cerca de 1,2 horas se o link for capaz de enviar 84 GB por hora e se não houver outros bancos de dados sendo semeados para um link diferente. Se o link só puder transferir 10 GB por hora, a propagação de um banco de dados de 100 GB pode levar cerca de 10 horas. Se houver vários bancos de dados para replicar por meio de vários links, a propagação será executada em paralelo e, quando combinada com uma velocidade de link lenta, a fase inicial de propagação pode levar consideravelmente mais tempo, especialmente se a propagação paralela de dados de todos os bancos de dados exceder a largura de banda de link disponível.

A fase inicial de disseminação não é resiliente a interrupções de rede, problemas de manutenção de instâncias ou operações de failover. Se a conectividade bidirecional entre o SQL Server e a Instância Gerida do SQL for temporariamente perdida ou se o SQL Server ou a Instância Gerida do SQL for reiniciada ou sofrer um failover durante a fase inicial de seeding, o seeding será reiniciado.

Importante

A fase inicial de semeadura pode levar dias com links de velocidade extremamente baixa ou muito ocupados. Nesse caso, a criação do link pode expirar. A criação do link é cancelada automaticamente após 6 dias.

Se você tiver problemas com um link, poderá usar o SQL Server Management Studio (SSMS), o Transact-SQL (T-SQL), o Azure PowerShell ou a CLI do Azure para obter informações sobre o estado atual do link.

Use o T-SQL para obter detalhes rápidos do status do link e, em seguida, use o Azure PowerShell ou a CLI do Azure para obter informações abrangentes sobre o estado atual do link.

O monitoramento de links está disponível a partir do SQL Server Management Studio (SSMS) 21.0 (visualização).

Para verificar o estado do link no SSMS, siga estas etapas:

  1. Conecte-se a uma réplica que hospeda o link.

  2. No Pesquisador de Objetos, expanda Sempre em Alta Disponibilidade e, em seguida, expanda Grupos de Disponibilidade.

  3. Clique com o botão direito do mouse no nome do link e selecione Propriedades para abrir a janela Propriedades do link :

    Captura de ecrã do menu do botão direito do rato numa ligação no SSMS, com as propriedades realçadas.

  4. A janela Propriedades do link exibe informações úteis sobre o link, como informações de réplica, estado do link e data de expiração do certificado do ponto de extremidade:

    Captura de ecrã da janela de propriedades da ligação no SSMS.

O valor replicaState descreve o link atual. Se o estado incluir também Erro , ocorreu um erro durante a operação mencionada no estado. Por exemplo, LinkCreationError indica que ocorreu um erro ao criar o link.

Alguns valores possíveis replicaState são:

  • CriarLigação : Semeadura inicial
  • LinkSynchronizing: A replicação de dados está em andamento
  • LinkFailoverInProgress: O failover está em andamento

Para obter uma lista completa das propriedades do estado do link, revise o comando Distributed Availability Groups - GET REST API.

Há duas categorias distintas de erros que você pode encontrar ao usar o link - erros quando você tenta inicializar o link e erros quando você tenta criar o link.

O seguinte erro pode ocorrer ao inicializar um link (estado do link: LinkInitError):

  • Erro 41962: Operação abortada porque o link não foi iniciado em 5 minutos. Verifique a conectividade de rede e tente novamente.
  • Erro 41973: O link não pode ser estabelecido porque o certificado de ponto de extremidade do SQL Server não foi importado corretamente para a Instância Gerida SQL do Azure.
  • Erro 41974: A ligação não pode ser estabelecida porque o certificado de ponto de extremidade da Instância Gerida do SQL não foi importado para o SQL Server corretamente.
  • Erro 41976: O grupo de disponibilidade não está respondendo. Verifique os nomes e os parâmetros de configuração e tente novamente.
  • Erro 41986: O link não pode ser estabelecido porque a conexão falhou ou a réplica secundária não está respondendo. Verifique nomes, parâmetros de configuração e conectividade de rede e tente novamente.
  • Erro 47521: O link não pode ser estabelecido porque o servidor secundário não recebeu a solicitação. Verifique se o grupo de disponibilidade e os bancos de dados estão íntegros no servidor primário e tente novamente.

Os seguintes erros podem ocorrer ao criar um link (estado do link: LinkCreationError):

  • Erro 41977: O banco de dados de destino não está respondendo. Verifique os parâmetros do link e tente novamente.

  • Truncamento prematuro do log: Se o log de transações for truncado antes que a propagação inicial termine, é provável que você veja um dos seguintes erros:

    • Erro 1408: A cópia remota do banco de dados "%.*ls" não é recuperada o suficiente para habilitar o espelhamento do banco de dados ou para associá-lo ao grupo de disponibilidade.
    • Erro 1412: A cópia remota do banco de dados "%.*ls" não foi avançada para um ponto no tempo que está coberto pela cópia local do log do banco de dados.

    Para resolver esse problema, você deve soltar e recriar o link.
    Para evitar esse problema, pause os backups de log de transações no SQL Server para que o banco de dados seja replicado durante a fase inicial de propagação.

Estado inconsistente após failover forçado

Após umade failover de forçada, você pode encontrar um cenário de cérebro dividido em que ambas as réplicas estão na função principal, deixando o link em um estado inconsistente. Isso pode acontecer se você fizer failover para a réplica secundária durante um desastre e, em seguida, a réplica primária voltar a ficar online.

Primeiro, confirme que você está em um cenário de cérebro dividido. Você pode fazer isso usando o SQL Server Management Studio (SSMS) ou o Transact-SQL (T-SQL).

Conecte-se à instância gerenciada do SQL Server e do SQL no SSMS e, em seguida, nodo Pesquisador de Objetos, expanda réplicas de Disponibilidade no nó grupo Disponibilidade node Alta Disponibilidade Always On . Se duas réplicas diferentes estiverem listadas como (Principal), você estará em um cenário de cérebro dividido.

Como alternativa, você pode executar o seguinte script T-SQL no SQL Server e na Instância Gerenciada do SQL para verificar a função das réplicas:

-- Execute on SQL Server and SQL Managed Instance 
USE master
DECLARE @link_name varchar(max) = '<DAGName>'
SELECT
   ag.name [Link name], 
   rs.role_desc [Link role] 
FROM
   sys.availability_groups ag 
   JOIN sys.dm_hadr_availability_replica_states rs 
   ON ag.group_id = rs.group_id 
WHERE 
   rs.is_local = 1 AND ag.is_distributed = 1 AND ag.name = @link_name 
GO

Se ambas as instâncias listarem PRIMÁRIO em coluna função Link, você estará em um cenário de cérebro dividido.

Para resolver o estado cerebral dividido, primeiro faça um backup em qualquer réplica que fosse a primária original. Se o primário original era o SQL Server, faça um backup de log final . Se o primário original era a Instância Gerenciada SQL, faça um backup completo somente cópia. Após a conclusão do backup, atribua a função secundária ao grupo de disponibilidade distribuída para a réplica que costumava ser a primária original, mas que agora será a nova secundária.

Por exemplo, no caso de um verdadeiro desastre, supondo que você forçou um failover de sua carga de trabalho do SQL Server para a Instância Gerenciada SQL do Azure e pretende continuar executando sua carga de trabalho na Instância Gerenciada do SQL, faça um backup de log final no SQL Server e defina o grupo de disponibilidade distribuída para a função secundária no SQL Server, como o exemplo a seguir:

--Execute on SQL Server 
USE master
ALTER AVAILABILITY GROUP [<DAGName>] 
SET (ROLE = SECONDARY) 
GO 

Em seguida, execute um failover manual planejado da Instância Gerenciada do SQL para o SQL Server usando o link, como o exemplo a seguir:

--Execute on SQL Managed Instance 
USE master
ALTER AVAILABILITY GROUP [<DAGName>] FAILOVER 
GO 

Certificado expirado

É possível que o certificado usado para o link expire. Se o certificado expirar, o link falhará. Para resolver esse problema, gire o certificado.

Testar a conectividade de rede

A conectividade de rede bidirecional entre o SQL Server e a Instância Gerenciada do SQL é necessária para que o link funcione. Depois de abrir portas no lado do SQL Server e configurar uma regra NSG no lado da Instância Gerenciada SQL, teste a conectividade usando o SQL Server Management Studio (SSMS) ou o Transact-SQL.

Teste a rede criando um trabalho temporário do SQL Agent no SQL Server e na Instância Gerenciada do SQL para verificar a conexão entre as duas instâncias. Quando utiliza o Verificador de Rede no SSMS, a tarefa é criada automaticamente para si e eliminada após a conclusão do teste. Você precisará excluir manualmente o trabalho do SQL Agent se testar sua rede usando T-SQL.

Observação

Atualmente, não há suporte para a execução de scripts do PowerShell pelo SQL Server Agent no SQL Server no Linux, portanto, atualmente não é possível executar Test-NetConnection do trabalho do SQL Server Agent no SQL Server no Linux.

Para usar o SQL Agent para testar a conectividade de rede, você precisa dos seguintes requisitos:

  • O utilizador que faz o teste deve ter permissões de para criar uma tarefa (como sysadmin ou pertença à função SQLAgentOperator em ) tanto para o SQL Server como para a Instância Gerida do SQL.
  • O serviço SQL Server Agent deve estar executando no SQL Server. Como o Agente está ativado por padrão na Instância Gerenciada SQL, nenhuma ação adicional é necessária.

Considere o seguinte:

  • Para evitar falsos negativos, todos os firewalls ao longo do caminho da rede devem permitir o tráfego do Protocolo de Mensagens de Controlo da Internet (ICMP).
  • Para evitar falsos positivos, todos os firewalls ao longo do caminho de rede devem permitir o tráfego no protocolo proprietário SQL Server UCS. Bloquear o protocolo pode levar a um teste de ligação bem-sucedido, mas a ligação não se cria.
  • Configurações avançadas de firewall com guardas ao nível de pacotes precisam de ser devidamente configuradas para permitir o tráfego entre SQL Server e SQL Managed Instance.

Para testar a conectividade de rede entre o SQL Server e a Instância Gerenciada do SQL no SSMS, siga estas etapas:

  1. Conecte-se à instância que será a réplica primária no SSMS.

  2. No Explorador de Objetos, expanda os bancos de dados e clique com o botão direito no banco de dados que pretende vincular ao banco de dados secundário. Selecione Tarefas>Instância Gerenciada SQL do Azure>Testar Conexão para abrir o assistente Verificador de Rede:

    Captura de tela do pesquisador de objetos no SSMS, com conexão de teste selecionada no menu do botão direito do mouse do link do banco de dados.

  3. Selecione Próximo na página de Introdução do assistente do Verificador de Rede.

  4. Se todos os requisitos forem atendidos na página de Pré-requisitos , selecione Avançar. Caso contrário, resolva os pré-requisitos não atendidos e, em seguida, selecione Reexecutar Validação.

  5. Na página de login , selecione a opção de login para se conectar à outra instância que será a réplica secundária. Selecione Avançar.

  6. Verifique os detalhes na página Especificar Opções de Rede e forneça um endereço IP, se necessário. Selecione Avançar.

  7. Na página Resumo, revise as ações executadas pelo assistente e selecione Concluir para testar a conexão entre as duas réplicas.

  8. Revise a página Resultados para validar se existe conectividade entre as duas réplicas e selecione Fechar para concluir.

Atenção

Prossiga com as próximas etapas somente se tiver validado a conectividade de rede entre seus ambientes de origem e de destino. Caso contrário, solucione problemas de conectividade de rede antes de continuar.

Para obter mais informações sobre o recurso de link, revise os seguintes recursos: