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.

Inserimento iniziale

Quando si stabilisce un collegamento tra SQL Server e Istanza gestita di SQL di Azure, è presente una fase di seeding iniziale prima dell'avvio della replica dei dati. La fase iniziale del seeding è la parte più lunga e più costosa dell'operazione. Una volta completato il seeding iniziale, i dati vengono sincronizzati e vengono replicate solo le modifiche ai dati successive. Il tempo necessario per il completamento del seeding iniziale dipende dalle dimensioni dei dati, dall'intensità del carico di lavoro nei database primari e dalla velocità del collegamento tra reti delle repliche primarie e secondarie.

Se la velocità del collegamento tra le due istanze è più lenta rispetto a quella necessaria, è probabile che il tempo di inizializzazione sia notevolmente influenzato. È possibile usare la velocità di seeding dichiarata, le dimensioni totali dei dati e la velocità di collegamento per stimare il tempo necessario per la fase iniziale di seeding prima dell'avvio della replica dei dati. Ad esempio, per un singolo database da 100 GB, la fase di inizializzazione iniziale richiederà circa 1,2 ore se il collegamento è in grado di eseguire il push di 84 GB all'ora e se non sono presenti altri database sottoposti a seeding in un collegamento diverso. Se il collegamento può trasferire solo 10 GB all'ora, il seeding di un database da 100 GB può richiedere circa 10 ore. Se sono presenti più database da replicare tramite più collegamenti, il seeding verrà eseguito in parallelo e, in combinazione con una velocità di collegamento lenta, la fase di seeding iniziale potrebbe richiedere molto più tempo, soprattutto se il seeding parallelo dei dati di tutti i database supera la larghezza di banda del collegamento disponibile.

La fase di seeding iniziale non è resiliente a interruzioni di rete né a operazioni di manutenzione dell'istanza o di failover. Se la connettività bidirezionale tra SQL Server e Istanza gestita di SQL viene temporaneamente persa o se SQL Server o Istanza gestita di SQL viene riavviata o ne viene eseguito il failover durante la fase di seeding iniziale, il seeding viene riavviato.

Importante

La fase iniziale di seeding può richiedere giorni con collegamenti a velocità estremamente bassa o molto occupati. In questo caso, la creazione del collegamento può andare in timeout. La creazione del collegamento viene annullata automaticamente dopo 6 giorni.

Se si verificano problemi con un collegamento, è possibile usare SQL Server Management Studio (SSMS), 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.

Il monitoraggio dei collegamenti è disponibile a partire da SQL Server Management Studio (SSMS) 21.0 (anteprima).

Per controllare lo stato del collegamento in SSMS, seguire questa procedura:

  1. Connettersi a una replica che ospita il collegamento.

  2. In Esplora oggetti, espandere Disponibilità elevata Always On e quindi espandere Gruppi di disponibilità.

  3. Fare clic con il pulsante destro del mouse sul nome del collegamento e quindi scegliere Proprietà per aprire la finestra Proprietàcollegamento :

    Screenshot del menu di scelta rapida su un collegamento in SSMS, con le proprietà evidenziate.

  4. Nella finestra Proprietà collegamento vengono visualizzate informazioni utili sul collegamento, ad esempio informazioni sulla replica, stato del collegamento e data di scadenza del certificato dell'endpoint:

    Screenshot della finestra delle proprietà del collegamento in SSMS.

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.

Durante la creazione di un collegamento (stato collegamento) possono verificarsi gli errori seguenti: LinkCreationError:

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

  • Troncamento del log prematuro: se il log delle transazioni viene troncato prima del completamento del seeding iniziale, è probabile che venga visualizzato uno degli errori seguenti:

    • Errore 1408: la copia remota del database "%.*ls" non è stata recuperata abbastanza lontano per abilitare il mirroring del database o aggiungerla al gruppo di disponibilità.
    • Errore 1412: la copia remota del database "%.*ls" non è stata inoltrata a un punto nel tempo incluso nella copia locale del log del database.

    Per risolvere questo problema, è necessario eliminare e ricreare il collegamento.
    Per evitare questo problema, sospendere i backup del log delle transazioni in SQL Server per la replica del database durante la fase di seeding iniziale.

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 

Certificato scaduto

È possibile che il certificato usato per il collegamento scada. Se il certificato scade, il collegamento non riesce. Per risolvere questo problema, ruotare il certificato.

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.

Tenere presente quanto segue:

  • Per evitare falsi negativi, tutti i firewall lungo il percorso di rete devono consentire il traffico ICMP (Internet Control Message Protocol).
  • Per evitare falsi positivi, tutti i firewall lungo il percorso di rete devono consentire il traffico sul protocollo UCS di SQL Server proprietario. Il blocco del protocollo può portare a un test di connessione riuscito, ma non riesce a creare il collegamento.
  • Le configurazioni avanzate del firewall con protezioni a livello di pacchetto devono essere configurate correttamente per consentire correttamente il traffico tra SQL Server e Istanza gestita di SQL.

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 SSMS, 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: