Condividi tramite


Risoluzione dei problemi del collegamento - Istanza gestita di SQL di Azure

si applica a:Istanza Gestita di Azure SQL

Questo articolo illustra come monitorare e risolvere i problemi relativi a un collegamento tra SQL Server e Istanza gestita di SQL di Azure.

È possibile controllare lo stato del collegamento con Transact-SQL (T-SQL), Azure PowerShell o l'interfaccia della riga di comando di Azure. Se si verificano problemi, è possibile usare i codici di errore per risolvere il problema.

Molti problemi relativi alla creazione del collegamento possono essere risolti controllare il di rete tra le due istanze e convalidare l'ambiente è stato preparato correttamente per il collegamento.

Se si verificano problemi con un collegamento, è possibile usare Transact-SQL (T-SQL), Azure PowerShell o l'interfaccia della riga di comando di Azure per ottenere informazioni sullo stato corrente del collegamento.

Usare T-SQL per informazioni rapide sullo stato del collegamento e quindi usare Azure PowerShell o l'interfaccia della riga di comando di Azure per informazioni complete sullo stato corrente del collegamento.

Usare T-SQL per determinare lo stato del collegamento durante la fase di seeding o dopo l'inizio della sincronizzazione dei dati.

Usare la query T-SQL seguente per determinare lo stato del collegamento durante la fase di seeding in SQL Server o Istanza gestita di SQL che ospita il database di cui è stato eseguito il seeding tramite il collegamento:

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 la query non restituisce risultati, il processo di seeding non è stato avviato o è già stato completato.

Usare la seguente query T-SQL nell'istanza primaria di per verificare l'integrità del collegamento una volta avviata la sincronizzazione dei dati.

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

La query restituisce i valori possibili seguenti:

  • nessun risultato: la query è stata eseguita nell'istanza secondaria.
  • HEALTHY: il collegamento è integro e i dati vengono sincronizzati tra le repliche.
  • NOT_HEALTHY: il collegamento non è integro e i dati non vengono sincronizzati tra le repliche.

Il valore replicaState descrive il collegamento corrente. Se lo stato include anche Errore, si è verificato un errore durante l'operazione elencata nello stato . Ad esempio, LinkCreationError indica che si è verificato un errore durante la creazione del collegamento.

Alcuni possibili valori replicaState sono:

  • CreatingLink: seeding iniziale
  • LinkSynchronizing: La replica dei dati è in corso
  • LinkFailoverInProgress: Il failover è in corso

Per un elenco completo delle proprietà dello stato del collegamento, vedere il comando Distributed Availability Groups - GET API REST.

Esistono due categorie distinte di errori che è possibile riscontrare quando si usa il collegamento: errori quando si tenta di inizializzare il collegamento ed errori quando si tenta di creare il collegamento.

L'errore seguente può verificarsi durante l'inizializzazione di un collegamento (stato del collegamento: LinkInitError):

  • Errore 41962: Operazione interrotta perché il collegamento non è stato avviato entro 5 minuti. Verificare la connettività di rete e riprovare.
  • Errore 41973: impossibile stabilire il collegamento perché certificato dell'endpoint da SQL Server non è stato importato correttamente in Istanza gestita di SQL di Azure.
  • Errore 41974: Impossibile stabilire il collegamento perché certificato dell'endpoint dall'istanza gestita di SQL non è stato importato correttamente in SQL Server.
  • Errore 41976: il gruppo di disponibilità non risponde. Controllare i nomi e i parametri di configurazione e riprovare.
  • Errore 41986: Impossibile stabilire il collegamento perché la connessione non è riuscita o la replica secondaria non risponde. Controllare i nomi, i parametri di configurazione e la connettività di rete , quindi riprovare.
  • Errore 47521: Impossibile stabilire il collegamento perché il server secondario non ha ricevuto la richiesta. Verificare che il gruppo di disponibilità e i database siano integri nel server primario e riprovare.

L'errore seguente può verificarsi durante la creazione di un collegamento (stato del collegamento: LinkCreationError):

  • Errore 41977: il database di destinazione non risponde. Controllare i parametri di collegamento e riprovare.

Stato incoerente dopo il failover forzato

Dopo un failover forzato , è possibile che si verifichi uno scenario di split-brain in cui entrambe le repliche assumono il ruolo primario, lasciando il collegamento in uno stato incoerente. Ciò può verificarsi se si esegue il failover nella replica secondaria durante un disastro e quindi la replica primaria torna online.

Prima di tutto, verificare di essere in uno scenario split-brain. A tale scopo, è possibile usare SQL Server Management Studio (SSMS) o Transact-SQL (T-SQL).

Connettersi sia a SQL Server che a Istanza gestita di SQL in SSMS e quindi in Esplora oggetti espandere repliche di disponibilità nel nodo gruppo di disponibilità in disponibilità elevata AlwaysOn. Se due repliche diverse sono elencate come (primario), si è in uno scenario split-brain.

In alternativa, è possibile eseguire lo script T-SQL seguente in SQL Server e Istanza gestita di SQL per controllare il ruolo delle repliche:

-- 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 entrambe le istanze elencano PRIMARY nella colonna ruolo del collegamento, si è in uno scenario di split-brain.

Per risolvere lo stato del cervello diviso, eseguire prima un backup sulla replica primaria originale. Se il database primario originale era SQL Server, eseguire un backup della parte finale del log . Se l'istanza primaria originale era Istanza gestita di SQL, eseguire un backup completo di sola copia. Al termine del backup, impostare il gruppo di disponibilità distribuito sul ruolo secondario per la replica che era la primaria originale, ma che sarà ora la nuova replica secondaria.

Ad esempio, in caso di vera emergenza, presupponendo che sia stato forzato un failover del carico di lavoro di SQL Server a Istanza SQL Gestita di Azure e si intenda continuare a eseguire il carico di lavoro su Istanza SQL Gestita, eseguire un backup del log finale in SQL Server e quindi impostare il ruolo secondario nel gruppo di disponibilità distribuito in SQL Server come segue:

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

Eseguire quindi un failover manuale pianificato da Istanza gestita di SQL a SQL Server usando il collegamento , ad esempio:

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

Testare la connettività di rete

La connettività di rete bidirezionale tra SQL Server e Istanza gestita di SQL è necessaria per il funzionamento del collegamento. Dopo aver aperto le porte su SQL Server e configurato una regola del gruppo di sicurezza di rete su SQL Managed Instance, testa la connettività usando SQL Server Management Studio (SSMS) o Transact-SQL.

Testare la rete creando un processo temporaneo di SQL Agent sia in SQL Server che in Istanza gestita di SQL per verificare la connessione tra le due istanze. Quando si utilizza lo strumento Verifica della Rete in SSMS, il job viene creato automaticamente e cancellato al completamento del test. È necessario eliminare manualmente il processo di SQL Agent se si testa la rete usando T-SQL.

Nota

L'esecuzione di script PowerShell da SQL Server Agent su SQL Server in Linux non è attualmente supportata, quindi non è possibile eseguire Test-NetConnection da un processo di SQL Server Agent su SQL Server in Linux.

Per usare SQL Agent per testare la connettività di rete, sono necessari i requisiti seguenti:

  • L'utente che esegue il test deve avere autorizzazioni per creare un processo (come sysadmin o appartiene al ruolo di SQLAgentOperator per msdb) sia per SQL Server che per Istanza Gestita di SQL.
  • Il servizio SQL Server Agent deve essere in esecuzione su SQL Server. Poiché Agent è attivato per impostazione predefinita in Istanza gestita di SQL, non è necessaria alcuna azione aggiuntiva.

Per testare la connettività di rete tra SQL Server e Istanza gestita di SQL in SSMS, seguire questa procedura:

  1. Connettersi all'istanza che sarà la replica primaria in SSMS.

  2. In Esplora oggettiespandere i database e fare clic con il pulsante destro del mouse sul database che si intende collegare al database secondario. Selezionare attivitàcollegamento Istanza gestita di SQL di Azuretest connessione per aprire la guidata controllo di rete :

    Screenshot di Esplora oggetti in S M S, con connessione di test selezionata nel menu di scelta rapida del collegamento al database.

  3. Selezionare Avanti nella pagina Introduzione della procedura guidata di controllo della rete .

  4. Se tutti i requisiti vengono soddisfatti nella pagina Prerequisiti, selezionare Avanti. In caso contrario, risolvere eventuali prerequisiti non soddisfatti e quindi selezionare Ripeti la convalida.

  5. Nella pagina di accesso selezionare Login per connettersi all'altra istanza che fungerà da replica secondaria. Selezionare Avanti.

  6. Controllare i dettagli nella pagina Specificare le opzioni di rete e specificare un indirizzo IP, se necessario. Selezionare Avanti.

  7. Nella pagina riepilogo esaminare le azioni eseguite dalla procedura guidata e quindi selezionare Fine per testare la connessione tra le due repliche.

  8. Esaminare la pagina Risultati per convalidare l'esistenza della connettività tra le due repliche e quindi selezionare Chiudi per completare.

Attenzione

Procedere con i passaggi successivi solo se è stata convalidata la connettività di rete tra gli ambienti di origine e di destinazione. In caso contrario, risolvere i problemi di connettività di rete prima di procedere.

Per altre informazioni sulla funzionalità di collegamento, vedere le risorse seguenti: