Partager via


Lien de dépannage – Azure SQL Managed Instance

S’applique à :Azure SQL Managed Instance

Cet article explique comment surveiller et résoudre les problèmes liés à SQL Server et à Azure SQL Managed Instance.

Vous pouvez vérifier l’état du lien avec Transact-SQL (T-SQL), Azure PowerShell ou Azure CLI. Si vous rencontrez des problèmes, vous pouvez utiliser les codes d’erreur pour résoudre le problème.

De nombreux problèmes liés à la création du lien peuvent être résolus en vérifiant le réseau entre les deux instances et en validant l’environnement correctement préparé pour le lien.

Amorçage initial

Lors de l’établissement d’un lien entre SQL Server et Azure SQL Managed Instance, il existe une phase d’amorçage initiale avant le démarrage de la réplication des données. La phase d’amorçage initiale est la partie de l’opération la plus longue et la plus coûteuse. Une fois l’amorçage initial terminé, les données sont synchronisées, puis seules les modifications de données ultérieures sont répliquées. Le temps nécessaire à l’amorçage initial dépend de la taille des données, de l’intensité de la charge de travail sur les bases de données primaires et de la vitesse du lien entre les réseaux des réplicas principaux et secondaires.

Si la vitesse de la liaison entre les deux instances est plus lente que nécessaire, la durée de l’amorçage risque d’être sensiblement affectée. Vous pouvez utiliser la vitesse d’amorçage indiquée, la taille totale des données et la vitesse de liaison pour estimer la durée pendant laquelle la phase d’amorçage initiale prendra avant le démarrage de la réplication des données. Par exemple, pour une base de données de 100 Go unique, la phase initiale d’amorçage prend environ 1,2 heures si le lien est capable d’envoyer (push) 84 Go par heure, et s’il n’y a pas d’autres bases de données à amorçage vers un autre lien. Si la liaison ne peut transférer que 10 Go par heure, l’amorçage d’une base de données de 100 Go prendra environ 10 heures. S’il existe plusieurs bases de données à répliquer via plusieurs liens, l’amorçage est exécuté en parallèle et, lorsqu’il est combiné à une vitesse de liaison lente, la phase d’amorçage initiale peut prendre beaucoup plus de temps, en particulier si l’amorçage parallèle de toutes les bases de données dépasse la bande passante de liaison disponible.

La phase d’amorçage initiale n’est pas résiliente aux interruptions réseau et aux opérations de maintenance ou de basculement d’instance. Si la connectivité bidirectionnelle entre SQL Server et SQL Managed Instance est temporairement perdue, ou si SQL Server ou SQL Managed instance est redémarrée ou basculée pendant la phase d’amorçage initiale, l’amorçage est redémarré.

Important

La phase d’amorçage initiale peut prendre des jours avec des connexions extrêmement lentes ou congestionnées. Dans ce cas, la création du lien peut expirer. La création du lien est automatiquement annulée après 6 jours.

Si vous rencontrez des problèmes avec un lien, vous pouvez utiliser SQL Server Management Studio (SSMS), Transact-SQL (T-SQL), Azure PowerShell ou Azure CLI pour obtenir des informations sur l’état actuel du lien.

Utilisez T-SQL pour obtenir des détails d’état rapide sur l’état du lien, puis utilisez Azure PowerShell ou Azure CLI pour obtenir des informations complètes sur l’état actuel du lien.

La surveillance des liens est disponible à partir de SQL Server Management Studio (SSMS) 21.0 (préversion).

Pour vérifier l’état du lien dans SSMS, procédez comme suit :

  1. Connectez-vous à une réplique qui héberge le lien.

  2. Dans l’Explorateur d’objets, développez Haute disponibilité Always On, puis Groupes de disponibilité.

  3. Cliquez avec le bouton droit sur le nom du lien, puis sélectionnez Propriétés pour ouvrir la fenêtre Propriétés du lien :

    Capture d’écran du menu contextuel d’un lien dans SSMS, avec les propriétés mises en surbrillance.

  4. La fenêtre Propriétés du lien affiche des informations utiles sur le lien, telles que les informations de réplica, l’état du lien et la date d’expiration du certificat de point de terminaison :

    Capture d’écran de la fenêtre propriétés du lien dans SSMS.

La valeur replicaState décrit le lien actuel. Si l’état inclut également l’erreur , une erreur s’est produite pendant l’opération répertoriée dans l’état. Par exemple, LinkCreationError indique qu’une erreur s’est produite lors de la création du lien.

Certaines valeurs replicaState possibles sont les suivantes :

  • CreatingLink : amorçage initial
  • LinkSynchronizing : la réplication des données est en cours
  • LinkFailoverInProgress : le basculement est en cours

Pour obtenir la liste complète des propriétés d’état de lien, passez en revue la commande groupes de disponibilité distribués - GET REST API.

Il existe deux catégories distinctes d’erreurs que vous pouvez rencontrer lors de l’utilisation du lien : des erreurs lorsque vous essayez d’initialiser le lien et des erreurs lorsque vous essayez de créer le lien.

L’erreur suivante peut se produire lors de l’initialisation d’un lien (état du lien : ) : LinkInitError

Les erreurs suivantes peuvent se produire lors de la création d’un lien (état de lien : ) : LinkCreationError

  • Erreur 41977 : La base de données cible n’est pas réactive. Vérifiez les paramètres de lien et réessayez.

  • Troncation prématurée du journal : si le journal des transactions est tronqué avant que l’amorçage initial ne soit terminé, vous risquez de voir l’une des erreurs suivantes :

    • Erreur 1408 : La copie distante de la base de données «%.*ls » n’est pas suffisamment récupérée pour activer la mise en miroir de bases de données ou pour la joindre au groupe de disponibilité.
    • Erreur 1412 : La copie distante de la base de données « %.*ls » n'a pas été restaurée par progression jusqu'à une limite dans le temps qui est incluse dans la copie locale du fichier journal de la base de données.

    Pour résoudre ce problème, vous devez supprimer et recréer le lien.
    Pour éviter ce problème, suspendez les sauvegardes du journal des transactions sur SQL Server pour la base de données répliquée pendant la phase d’amorçage initiale.

État incohérent après le basculement forcé

Après un basculement forcé, vous pouvez rencontrer un scénario de cerveau divisé où les deux réplicas prennent le rôle principal, laissant le lien dans un état incohérent. Cela peut se produire si vous basculez vers le réplica secondaire lors d’une urgence, puis que le réplica principal revient en ligne.

Tout d’abord, vérifiez que vous êtes dans un scénario fractionné. Vous pouvez le faire à l’aide de SQL Server Management Studio (SSMS) ou de Transact-SQL (T-SQL).

Connectez-vous à SQL Server et à SQL Managed Instance dans SSMS, puis dans l’Explorateur d’objets, développez les réplicas de disponibilité sous le nœud du groupe de disponibilité dans Haute disponibilité Always-on. Si deux réplicas différents sont répertoriés en tant que (Principal), vous êtes dans un scénario fractionné.

Vous pouvez également exécuter le script T-SQL suivant sur SQL Server et SQL Managed Instance pour vérifier le rôle des 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

Si les deux instances répertorient PRIMARY dans la colonne rôle de lien, vous êtes dans un scénario de cerveau partagé.

Pour résoudre l’état fractionné, commencez par effectuer une sauvegarde sur le réplica qui était le réplica principal d’origine. Si le réplica principal d’origine était SQL Server, effectuez une sauvegarde de la fin du journal. Si le réplica principal d’origine était SQL Managed Instance, effectuez une sauvegarde complète de copie uniquement. Une fois la sauvegarde terminée, définissez le groupe de disponibilité distribué sur le rôle secondaire pour le réplica qui était le réplica principal d’origine, mais sera désormais le nouveau réplica secondaire.

Par exemple, en cas d’urgence véritable, en supposant que vous avez forcé un basculement de votre charge de travail SQL Server vers Azure SQL Managed Instance et que vous envisagez de continuer à exécuter votre charge de travail sur SQL Managed Instance, effectuez une sauvegarde de la fin du journal sur SQL Server, puis définissez le groupe de disponibilité distribué sur le rôle secondaire sur SQL Server, comme dans l’exemple suivant :

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

Ensuite, exécutez un basculement manuel programmé de SQL Managed Instance vers SQL Server à l’aide de la liaison, comme dans l’exemple suivant :

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

Expiration du certificat

Il est possible que le certificat utilisé pour le lien expire. Si le certificat expire, le lien échoue. Pour résoudre ce problème, faites pivoter le certificat.

Testez la connectivité réseau

La connectivité réseau bidirectionnelle entre SQL Server et SQL Managed Instance est nécessaire pour que la liaison fonctionne. Après avoir ouvert les ports du côté du SQL Server et configuré une règle NSG du côté de SQL Managed Instance, testez la connectivité à l’aide de SQL Server Management Studio (SSMS) ou de Transact-SQL.

Testez le réseau en créant un projet SQL Agent temporaire sur SQL Server et SQL Managed Instance pour vérifier la connectivité entre les deux instances. Lorsque vous utilisez Vérificateur de réseau dans SSMS, le projet est automatiquement créé pour vous et supprimé une fois le test terminé. Vous devez supprimer manuellement le projet SQL Agent si vous testez votre réseau à l’aide de T-SQL.

Remarque

L’exécution de scripts PowerShell par l’agent SQL Server sur SQL Server sur Linux n’est pas prise en charge actuellement. Il n’est donc pas possible d’exécuter Test-NetConnection à partir du projet SQL Server Agent sur SQL Server sur Linux.

Pour utiliser SQL Agent pour tester la connectivité réseau, vous avez besoin des exigences suivantes :

  • L’utilisateur qui effectue le test doit disposer des autorisations pour créer un projet (en tant qu’administrateur système ou il appartient au rôle SQLAgentOperator pour msdb) pour SQL Server et SQL Managed Instance.
  • Le service SQL Server Agent doit être en cours d’exécution sur SQL Server. Étant donné que l’Agent est activé par défaut sur SQL Managed Instance, aucune action supplémentaire n’est nécessaire.

Tenez compte des éléments suivants :

  • Pour éviter les faux négatifs, tous les pare-feu le long du chemin d’accès réseau doivent autoriser le trafic ICMP (Internet Control Message Protocol).
  • Pour éviter les faux positifs, tous les pare-feu le long du chemin réseau doivent autoriser le trafic sur le protocole UCS SQL Server propriétaire. Le blocage du protocole peut entraîner un test de connexion réussi, mais le lien ne parvient pas à créer.
  • Les configurations avancées de pare-feu avec des garde-fous au niveau des paquets doivent être correctement configurées pour permettre correctement le trafic entre SQL Server et SQL Managed Instance.

Pour tester la connectivité réseau entre SQL Server et SQL Managed Instance dans SSMS, procédez comme suit :

  1. Connectez-vous à l’instance qui sera le réplica principal dans SSMS.

  2. Dans l’Explorateur d’objets, développez les bases de données et faites un clic droit sur la base de données que vous souhaitez lier à la réplica secondaire. Sélectionnez Tâches>liaison Azure SQL Managed Instance> Tester la connexion pour ouvrir l’Assistant Network Checker :

    Capture d’écran de l’Explorateur d’objets dans SSMS, avec la connexion de test sélectionnée dans le menu contextuel du lien de base de données.

  3. Sélectionnez Suivant sur la page Introduction de l’Assistant Network Checker.

  4. Si toutes les conditions requises sont remplies sur la page Conditions préalables, sélectionnez Suivant. Dans le cas contraire, résolvez toutes les conditions préalables non remplies, puis sélectionnez Réexécuter la validation.

  5. Sur la page Connexion, sélectionnez Connexion pour vous connecter à l’autre instance qui sera la réplica secondaire. Cliquez sur Suivant.

  6. Vérifiez les détails de la page Spécifier les options de réseau et fournissez une adresse IP, si nécessaire. Cliquez sur Suivant.

  7. Sur la page Résumé, passez en revue les actions effectuées par l’Assistant, puis sélectionnez Terminer pour tester la connexion entre les deux réplicas.

  8. Passez en revue la page Résultats pour valider la connectivité qui existe entre les deux réplicas, puis sélectionnez Fermer pour terminer.

Avertissement

Passez aux étapes suivantes uniquement si vous avez validé la connectivité réseau entre vos environnements source et cible. Sinon, corrigez les problèmes de connectivité réseau avant de continuer.

Pour plus d’informations sur la fonctionnalité de lien, consultez les ressources suivantes :