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.

Se você tiver problemas com um link, poderá usar 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.

Use o T-SQL para determinar o estado do link durante a fase de propagação ou após o início da sincronização de dados.

Use a seguinte consulta T-SQL para determinar o status do link durante a fase de propagação no SQL Server ou na Instância Gerenciada do SQL que hospeda o banco de dados semeado por meio do link:

SELECT
    ag.local_database_name AS 'Local database name',
    ar.current_state AS 'Current state',
    ar.is_source AS 'Is source',
    ag.internal_state_desc AS 'Internal state desc',
    ag.database_size_bytes / 1024 / 1024 AS 'Database size MB',
    ag.transferred_size_bytes / 1024 / 1024 AS 'Transferred MB',
    ag.transfer_rate_bytes_per_second / 1024 / 1024 AS 'Transfer rate MB/s',
    ag.total_disk_io_wait_time_ms / 1000 AS 'Total Disk IO wait (sec)',
    ag.total_network_wait_time_ms / 1000 AS 'Total Network wait (sec)',
    ag.is_compression_enabled AS 'Compression',
    ag.start_time_utc AS 'Start time UTC',
    ag.estimate_time_complete_utc as 'Estimated time complete UTC',
    ar.completion_time AS 'Completion time',
    ar.number_of_attempts AS 'Attempt No'
FROM sys.dm_hadr_physical_seeding_stats AS ag
    INNER JOIN sys.dm_hadr_automatic_seeding AS ar
    ON local_physical_seeding_id = operation_id

-- Estimated seeding completion time
SELECT DISTINCT CONVERT(VARCHAR(8), DATEADD(SECOND, DATEDIFF(SECOND, start_time_utc, estimate_time_complete_utc) ,0), 108) as 'Estimated complete time'
FROM sys.dm_hadr_physical_seeding_stats

Se a consulta não retornar nenhum resultado, o processo de propagação não foi iniciado ou já foi concluído.

Use a seguinte consulta T-SQL na instância primária de para verificar a integridade do link a partir do momento em que a sincronização de dados começa:

DECLARE @link_name varchar(max) = '<DAGname>'
SELECT
   rs.synchronization_health_desc [Link sync health]
FROM
   sys.availability_groups ag 
   join sys.dm_hadr_availability_replica_states rs 
   on ag.group_id = rs.group_id 
WHERE 
   rs.is_local = 0 AND rs.role = 2 AND ag.is_distributed = 1 AND ag.name = @link_name 
GO

A consulta retorna os seguintes valores possíveis:

  • sem resultado: a consulta foi executada na instância secundária.
  • HEALTHY: O link está íntegro e os dados estão sendo sincronizados entre as réplicas.
  • NOT_HEALTHY: A ligação não está estável e os dados não estão a sincronizar entre as réplicas.

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.

O seguinte erro pode 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.

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 

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.

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 em S S M S, 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: