Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
S’applique à :SQL Server
Azure SQL Managed Instance
Le dépannage des erreurs de réplication peuvent être frustrant si vous n’avez pas une connaissance de base du fonctionnement de la réplication transactionnelle. La première étape de création d’une publication consiste à faire en sorte que l’Agent d’instantané crée l’instantané et l’enregistre dans le dossier des instantanés. Ensuite, l’Agent de distribution applique l’instantané à l’abonné.
Ce processus crée la publication et la place dans l’état En cours de synchronisation. La synchronisation fonctionne en trois phases :
Des transactions se produisent sur des objets qui sont répliqués et sont marqués « pour réplication » dans le journal des transactions.
L’Agent de lecture du journal parcourt le journal des transactions et recherche les transactions marquées « pour réplication ». Ces transactions sont ensuite enregistrées dans la base de données de distribution.
L’Agent de distribution parcourt la base de données de distribution en utilisant le thread de lecture. Ensuite, en utilisant le thread d’écriture, cet agent se connecte à l’abonné pour lui appliquer ces modifications.
Des erreurs peuvent se produire à chaque étape de ce processus. La recherche de ces erreurs peut être l’aspect le plus complexe de la résolution des problèmes de synchronisation. Heureusement, l’utilisation du moniteur de réplication facilite ce processus.
Remarque
L’objectif de ce guide de dépannage est de vous faire découvrir la méthodologie de résolution des problèmes. Il n’est pas conçu pour résoudre une erreur spécifique, mais de façon à fournir des indications générales pour la recherche d’erreurs dans la réplication. Il contient quelques exemples spécifiques, mais leur résolution peut varier en fonction de l’environnement. Les exemples d’erreurs sont basés sur le tutoriel : Configurer la réplication entre deux serveurs entièrement connectés (transactionnelle).
Méthodologie de résolution des erreurs
Questions à se poser
- Où la réplication échoue-t-elle dans le processus de synchronisation ?
- Quel agent rencontre une erreur ?
- Quand la dernière réplication a-t-elle fonctionné correctement ? Quelque chose a-t-il changé depuis lors ?
Étapes à suivre
Utilisez le Moniteur de réplication pour identifier à quel point la réplication rencontre l’erreur (quel agent ?) :
- Si les erreurs se produisent dans la section Du serveur de publication vers le serveur de distribution, c’est que le problème concerne l’Agent de lecture du journal.
- Si les erreurs se produisent dans la section Du serveur de distribution vers l’Abonné, c’est que le problème concerne l’Agent de distribution.
Examinez l’historique des travaux de cet agent dans le moniteur d’activité des travaux pour identifier les détails de l’erreur. Si l’historique des travaux n’affiche pas suffisamment de détails, vous pouvez activer la journalisation détaillée sur cet agent spécifique.
Essayez de déterminer une solution pour l’erreur.
Rechercher des erreurs avec l’Agent d’instantané
L’Agent d’instantané génère l’instantané et l’écrit dans le dossier d’instantanés spécifié.
Affichez l’état de votre Agent d’instantané :
Dans l’Explorateur d’objets, développez le nœud Publications locales sous Réplication.
Cliquez avec le bouton droit sur votre publication AdvWorksProductTrans>Afficher l’état de l’Agent d’instantané.
Si une erreur est signalée dans l’état de l’Agent d’instantané, vous pouvez trouver plus de détails dans l’historique des travaux de l’Agent d’instantané :
Développez SQL Server Agent dans l’Explorateur d’objets, puis ouvrez le moniteur d’activité des travaux.
Triez par Catégorie et identifiez l’Agent d’instantané dans la catégorie REPL-Instantané.
Cliquez avec le bouton droit sur l’Agent d’instantané, puis choisissez Afficher l’historique.
Dans l’historique de l’Agent d’instantané, sélectionnez l’entrée de journal appropriée. Il s’agit généralement d’une ou deux lignes avant l’entrée qui signale l’erreur. (Un X rouge indique des erreurs.) Passez en revue le texte du message dans la zone située sous les journaux :
The replication agent had encountered an exception. Exception Message: Access to path '\\node1\repldata.....' is denied.
Si vos autorisations Windows ne sont pas configurées correctement pour votre dossier d’instantanés, vous voyez une erreur « Accès refusé » pour l’Agent d’instantané. Vous devez vérifier les autorisations sur le dossier dans lequel votre instantané est stocké et vérifier que le compte utilisé pour exécuter l’Agent d’instantané dispose des autorisations nécessaires pour accéder au partage.
Rechercher les erreurs liées à l’Agent de lecture du journal
L’Agent de lecture du journal se connecte à la base de données de votre base de données du serveur de publication et recherche dans le journal des transactions toutes celles qui sont marquées « pour réplication ». Il ajoute ensuite ces transactions à la base de données de distribution.
Connectez-vous à la publication dans SQL Server Management Studio. Développez le nœud du serveur, cliquez avec le bouton droit sur le dossier Réplication, puis sélectionnez Lancer le moniteur de réplication :
Le Moniteur de réplication s’ouvre :
Le X rouge indique que la publication n'est pas synchronisée. Développez Mes serveurs de publication du côté gauche, puis développez le serveur de publication approprié.
Sélectionnez la publication AdvWorksProductTrans sur la gauche, puis recherchez le X rouge sur un des onglets pour identifier l’emplacement du problème. En l’occurrence, le X rouge se trouve sur l’onglet Agents, indiquant qu’un des agents rencontre une erreur :
Sélectionnez l’onglet Agents pour identifier l’agent qui rencontre l’erreur :
Cette vue vous montre deux agents : l’Agent d’instantané et l’Agent de lecture du journal. Celui qui rencontre une erreur a un X rouge. En l’occurrence, il s’agit de l’Agent de lecture du journal.
Double-cliquez sur la ligne qui signale l’erreur pour ouvrir l’historique de l’agent pour l’Agent de lecture du journal. Celui-ci fournit plus d’informations sur l’erreur :
Status: 0, code: 20011, text: 'The process could not execute 'sp_replcmds' on 'NODE1\SQL2016'.'. The process could not execute 'sp_replcmds' on 'NODE1\SQL2016'. Status: 0, code: 15517, text: 'Cannot execute as the database principal because the principal "dbo" does not exist, this type of principal cannot be impersonated, or you do not have permission.'. Status: 0, code: 22037, text: 'The process could not execute 'sp_replcmds' on 'NODE1\SQL2016'.'.L’erreur se produit généralement lorsque le propriétaire de la base de données de l’éditeur n’est pas défini correctement. Ceci peut se produire quand une base de données est restaurée. Pour vérifier cela :
Développez Bases de données dans l’Explorateur d’objets.
Cliquez avec le bouton droit sur AdventureWorks2025>Propriétés.
Vérifiez qu’un propriétaire existe sous la page Fichiers. Si cette zone est vide, ceci est la cause probable de votre problème.
Si le propriétaire est vide sur la page Fichiers, ouvrez une fenêtre Nouvelle requête dans le contexte de la base de données
AdventureWorks2025. Exécutez le code T-SQL suivant :-- set the owner of the database to 'sa' or a specific user account, without the brackets. EXECUTE sp_changedbowner '<useraccount>'; -- example for sa: exec sp_changedbowner 'sa' -- example for user account: exec sp_changedbowner 'sqlrepro\administrator'Il peut être nécessaire de redémarrer l’Agent de lecture du journal.
Développez le nœud SQL Server Agent dans l’Explorateur d’objets, puis ouvrez le moniteur d’activité des travaux.
Triez par Catégorie et identifiez l’Agent de lecture du journal dans la catégorie REPL-LogReader.
Cliquez avec le bouton droit sur le travail Agent de lecture du journal et sélectionnez Démarrer le travail à l’étape.
Vérifiez que votre publication est maintenant en cours de synchronisation en rouvrant le moniteur de réplication. S’il n’est pas déjà ouvert, vous pouvez le trouver en cliquant avec le bouton droit sur Réplication dans l’Explorateur d’objets.
Sélectionnez la publication AdvWorksProductTrans, sélectionnez l’onglet Agents, puis double-cliquez sur l’Agent de lecture du journal pour ouvrir l’historique de l’agent. Vous devez maintenant voir que l’Agent de lecture du journal est en cours d’exécution, et qu’il réplique des commandes ou qu’il indique « aucune transaction répliquée » :
Rechercher les erreurs avec l’Agent de distribution
L’Agent de distribution recherche des données dans la base de données de distribution, puis les applique à l’abonné.
Connectez-vous à la publication dans SQL Server Management Studio. Développez le nœud du serveur, cliquez avec le bouton droit sur le dossier Réplication, puis sélectionnez Lancer le moniteur de réplication.
Dans Moniteur de réplication, sélectionnez la publication AdvWorksProductTrans, puis l’onglet Tous les abonnements. Cliquez avec le bouton droit sur l’abonnement et sélectionnez Voir les détails :
La boîte de dialogue Historique du serveur de distribution vers l’Abonné s’ouvre et donne des indications sur l’erreur rencontrée par l’Agent :
Error messages: Agent 'NODE1\SQL2016-AdventureWorks2022-AdvWorksProductTrans-NODE2\SQL2016-7' is retrying after an error. 89 retries attempted. See agent job history in the Jobs folder for more details.L’erreur indique que l’Agent de distribution fait une nouvelle tentative. Pour trouver plus d’informations, consultez l’historique de l’Agent de Distribution :
Développez SQL Server Agent dans Explorateur d'objets >Moniteur d’activité des travaux.
Triez les travaux par Catégorie.
Identifiez l’Agent de distribution dans la catégorie REPL-Distribution. Cliquez avec le bouton droit sur l’agent, puis sélectionnez Afficher l’historique.
Sélectionnez une des entrées d’erreur et consultez le texte de l’erreur en bas de la fenêtre :
Message: Unable to start execution of step 2 (reason: Error authenticating proxy NODE1\repl_distribution, system error: The user name or password is incorrect.)Cette erreur indique que le mot de passe utilisé par l’Agent de distribution est incorrect. Pour la résoudre :
Développez le nœud Réplication dans l’Explorateur d’objets.
Cliquez avec le bouton droit sur l’abonnement >Propriétés.
Sélectionnez les points de suspension (...) à côté de Compte de processus de l’agent, puis modifiez le mot de passe.
Revenez au moniteur de réplication en cliquant avec le bouton droit sur Réplication dans l’Explorateur d’objets. Une croix (X) rouge sous Tous les abonnements indique que l’Agent de distribution rencontre encore une erreur.
Ouvrez l’historique Du serveur de distribution vers l’Abonné en cliquant avec le bouton droit sur l’abonnement dans Moniteur de réplication>Afficher les détails. Ici, l’erreur est désormais différente :
Connecting to Subscriber 'NODE2\SQL2016' Agent message code 20084. The process could not connect to Subscriber 'NODE2\SQL2016'. Number: 18456 Message: Login failed for user 'NODE2\repl_distribution'.Cette erreur indique que l’Agent de distribution n’a pas pu se connecter à l’abonné, car la connexion a échoué pour l’utilisateur NODE2\repl_distribution. Pour en savoir plus, connectez-vous à l’abonné et ouvrez le journal des erreurs SQL Actuel sous le nœud Gestion dans l’Explorateur d’objets :
Si vous voyez cette erreur, c’est que la connexion est manquante sur l’abonné. Pour résoudre cette erreur, consultez Configuration requise pour le rôle de sécurité pour la réplication.
Une fois que l’erreur de connexion est résolue, revenez au moniteur de réplication. Si tous les problèmes ont été traités, vous devez voir une flèche verte à côté de Nom de la publication et l’état En cours d’exécution sous Tous les abonnements.
Cliquez avec le bouton droit sur l’abonnement pour rouvrir l’historique Du serveur de distribution vers l’Abonné afin de vérifier que tout est résolu. Si c’est la première fois que vous exécutez l’agent de distribution, vous constatez que l’instantané a été copié en masse vers l’abonné :
Rechercher des erreurs avec l’Agent de fusion
L’agent de fusion peut prendre beaucoup de temps pour répliquer les modifications. Pour déterminer quelle étape du processus de synchronisation de réplication de fusion prend le plus de temps, utilisez le trace flag 101 avec la journalisation de l'agent de fusion. Pour cela, utilisez les paramètres suivants pour les paramètres de l’agent de fusion, puis redémarrez l’agent :
-T 101
-output
-outputverboselevel
Remarque
Si vous devez écrire des statistiques dans la table <distribution-server>..msmerge_history, utilisez l'indicateur de trace 102.
Un exemple de sortie de l’agent de fusion une fois la synchronisation de la réplication de fusion terminée est la suivante :
**************************************************************
CONNECTION TIMES --> time took to establish the connection to the servers. Publisher (all connections) 156 msec Subscriber (all connections) 32 msec Distributor 93 msec
**************************************************************
UPLOAD COUNTERS --> upload phase (changes from the Sub to the Pub) stats MakeGeneration Time = 343 msec. InsertGenHistory Time = 31 msec. UpdateGenHistory Time = 0 msec. ProxiedMetadata Time = 0 msec.
**************************************************************
DOWNLOAD COUNTERS --> download phase (changes from the Pub to the Sub) stats MakeGeneration Time = 219 msec. InsertGenHistory Time = 0 msec. UpdateGenHistory Time = 0 msec.
**************************************************************
RETENTION-BASED CLEANUP STATISTICS --> sp_mergemetadataretentioncleanup proc stats Publisher: Cleanup Time 281 msec MSmerge_genhistory rows cleaned up 0 MSmerge_contents rows cleaned up 0 MSmerge_tombstone rows cleaned up 0 Subscriber: Cleanup Time 187 msec MSmerge_genhistory rows cleaned up 0 MSmerge_contents rows cleaned up 0 MSmerge_rowtrack rows cleaned up 0 MSmerge_tombstone rows cleaned up 0
**************************************************************
RETRY STATISTICS Retry Time (Upload) 0 msec. Retry Time (Download) 0 msec. Total changes retried 0 Number of Iterations through rows needing retry 0 Total number of changes that failed despite retry 0
**************************************************************
PROXY METADATA QUEUE COUNTERS Queue Full: Number of Waits: 0, Total Wait Time: 0 msec
**************************************************************
Distributor-side History Logging Time = 219 msec. Number of Distributor-side History Messages Logged = 11 Subscriber-side History Logging Time = 295 msec. Number of Subscriber-side History Messages Logged = 11
**************************************************************
2013-05-28 17:24:11.820 OLE DB Subscriber '<SQL Server name>\sql2008r2': DBCC SQLPERF (NETSTATS) 2013-05-28 17:24:11.822 OLE DB Publisher '<SQL Server name>\SQL2008R2': DBCC SQLPERF (NETSTATS) 2013-05-28 17:24:11.824 OLE DB Distributor '<SQL Server name>\SQL2008R2': DBCC SQLPERF (NETSTATS) NETWORK STATISTICS Server Reads Writes Bytes Read Bytes Written Publisher 74 74 19112 37526 Subscriber 73 73 19032 36931 Distributor 75 75 19192 38121
**************************************************************
NETWORK STATUS Network Connection: The computer has one or more LAN cards that are active. Network link speed: Destination Incoming Outgoing Publisher Unreachable Unreachable Subscriber Unreachable Unreachable Distributor Unreachable Unreachable
**************************************************************
Activer la journalisation détaillée sur un agent
Vous pouvez utiliser la journalisation détaillée pour voir des informations plus détaillées sur les erreurs qui se produisent avec n’importe quel agent dans la topologie de réplication. Les étapes sont identiques pour chaque agent. Veillez simplement à sélectionner l’agent approprié dans le moniteur d’activité des travaux.
Remarque
Les agents peuvent être sur le serveur de publication ou sur l’abonné, selon s’il s’agit d’un abonnement par extraction ou par émission de données. Si l’agent n’est pas disponible sur le serveur que vous examinez, vérifiez l’autre serveur.
Décidez où vous voulez que la journalisation détaillée soit enregistrée et vérifiez que le dossier existe. Cet exemple utilise c:\temp.
Développez le nœud SQL Server Agent dans l’Explorateur d’objets, puis ouvrez le moniteur d’activité des travaux.
Triez par Catégorie et identifiez l’agent concerné. Cet exemple utilise l’Agent de lecture du journal. Cliquez avec le bouton droit sur l’agent concerné >Propriétés.
Sélectionnez la page Étapes, puis sélectionnez l’étape Exécution de l’agent. Sélectionnez Modifier.
Dans la zone Commande, commencez une nouvelle ligne, entrez le texte suivant et sélectionnez OK :
-Output C:\Temp\OUTPUTFILE.txt -Outputverboselevel 3Vous pouvez modifier l’emplacement et le niveau de détail selon vos préférences.
Lorsque vous ajoutez le paramètre de sortie détaillé, les problèmes suivants peuvent entraîner l’échec de votre agent ou l’absence du fichier outfile :
Il existe un problème de mise en forme là où le tiret est devenu un trait d’union.
L’emplacement n’existe pas sur le disque ou le compte qui exécute l’agent ne dispose pas d’autorisation d’écrire à l’emplacement spécifié.
Il manque un espace entre le dernier paramètre et le paramètre
-Output.Les différents agents prennent en charge des niveaux de détail différents. Si vous activez la journalisation détaillée mais que l’agent ne démarre pas, essayez en réduisant le niveau de détail de 1.
Redémarrez l’Agent de lecture du journal en double-cliquant sur l’agent >Arrêter le travail à l’étape. Actualisez en sélectionnant l’icône Actualiser dans la barre d’outils. Cliquez avec le bouton droit sur l’agent >Démarrer le travail à l’étape.
Examinez la sortie sur le disque.
Pour désactiver la journalisation détaillée, suivez les mêmes étapes que précédemment pour supprimer l’ensemble de la ligne
-Outputque vous avez ajoutée auparavant.
Contenu connexe
Obtenir de l’aide
- Idées pour SQL : vous avez des suggestions pour améliorer SQL Server ?
- Questions et réponses Microsoft (SQL Server)
- DBA Stack Exchange (balise sql-server) : posez des questions sur SQL Server
- Stack Overflow (balise sql-server) : réponses aux questions sur le développement SQL
- Termes du contrat de licence Microsoft SQL Server et autres informations
- Options de support pour les utilisateurs professionnels
- Aide et commentaires supplémentaires pour SQL Server
Contribuer à la documentation SQL
Saviez-vous que vous pouvez modifier le contenu SQL vous-même ? Dans ce cas, non seulement vous nous aidez à améliorer notre documentation, mais vous êtes également cité en tant que contributeur à la page.
Pour plus d’informations, consultez Modifier la documentation Microsoft Learn.