Utiliser le paramètre -SkipErrors dans Agent de distribution

Cet article présente l’utilisation du -SkipErrors paramètre dans Agent de distribution.

Version du produit d’origine : SQL Server
Numéro de la base de connaissances d’origine : 327817

Résumé

Microsoft SQL Server inclut le nouveau paramètre -SkipErrors dans le Agent de distribution qui permet au Agent de distribution d’ignorer l’erreur indiquée dans la réplication transactionnelle et de poursuivre le processus de distribution.

L’extrait suivant provient de la rubrique Gestion des erreurs de l’agent dans SQL Server documentation en ligne :

Dans le cadre d’un traitement de réplication classique, vous ne devez pas rencontrer d’erreurs qui doivent être ignorées. La possibilité d’ignorer les erreurs pendant la réplication transactionnelle est disponible pour les circonstances uniques où vous vous attendez à des erreurs et ne souhaitez pas qu’elles affectent la réplication (par exemple, lors du basculement vers un serveur de publication secondaire pendant la copie des journaux de transaction).

Microsoft vous recommande d’utiliser ce paramètre avec prudence et uniquement lorsque vous avez une bonne compréhension des éléments suivants :

  • Ce que l’erreur indique.
  • Pourquoi l’erreur se produit.
  • Pourquoi il est préférable d’ignorer l’erreur au lieu de la résoudre.

Si vous ne connaissez pas les réponses à ces éléments, une utilisation inappropriée du -SkipErrors paramètre peut entraîner une incohérence des données entre le serveur de publication et l’Abonné. Cet article décrit certains problèmes qui peuvent se produire lorsque vous utilisez le -SkipErrors paramètre de manière incorrecte.

Plus d’informations

Dans la réplication transactionnelle, les modifications de données sur le serveur de publication sont propagées à l’Abonné dans l’unité de transaction.

Dans une transaction, il peut y avoir plusieurs commandes. Par défaut, si une commande échoue, l’intégralité de la transaction de réplication est rétablie sur l’Abonné. Si vous ajoutez le -SkipErrors paramètre pour permettre au Agent de distribution d’ignorer certaines erreurs, la commande individuelle à l’origine de cette erreur n’est pas appliquée à l’Abonné, mais toutes les autres commandes dans les mêmes transactions sont appliquées. Dans ce cas, la transaction de réplication n’est que partiellement appliquée à l’Abonné, ce qui peut donc entraîner l’incohérence des données entre le serveur de publication et l’Abonné.

Par exemple :

Vous avez une transaction en attente d’être répliquée dans la table Abonné nommée T1. Cette transaction comprend 100 instructions insert. Lorsqu’elle s’applique à l’Abonné, les 90 premières insertions sont correctement traitées ; Toutefois, la quatre-vingt-dix-et-unième instruction insert échoue et l’erreur de violation de clé primaire 2627 se produit.

Lorsque vous n’utilisez pas le -SkipErrors paramètre (comportement par défaut) :

Par défaut, l’intégralité de la transaction est annulée et aucun des 100 nouveaux enregistrements n’est inséré dans la table d’abonnement. Dans ce cas, vous devez corriger l’erreur de réplication afin que la transaction puisse être réappliquée à l’Abonné.

Lorsque vous utilisez le -SkipErrors paramètre :

Le Agent de distribution enregistre l’erreur dans l’historique Agent de distribution, ignore cette erreur, puis poursuit le processus de distribution. Par conséquent, à l’exception du nouvel enregistrement qui a provoqué l’erreur, les 99 autres nouveaux enregistrements sont insérés dans la table d’abonnement. Cette transaction n’est pas réappliquée par le Agent de distribution, même après avoir corrigé manuellement l’erreur sur l’Abonné. Par conséquent, dans cette situation, l’Abonné ne dispose pas du nouvel enregistrement quatre-vingt-dix et un problème d’incohérence des données se produit.

Vous devez également savoir que, dans SQL Server 2000, le Agent de distribution est généralement partagé par plusieurs publications (par défaut, il existe une Agent de distribution par base de données de publication et par paire de base de données d’abonnement), donc si vous ajoutez le -SkipErrors paramètre à la Agent de distribution travail, il affecte toutes les publications que cet agent est en cours de maintenance. Dans les versions SQL 2005 et SQL 2008, la réplication transactionnelle utilise des agents indépendants par défaut pour les publications créées dans l’Assistant Nouvelle publication. Pour les publications créées à l’aide sp_addpublication d’une procédure stockée, le comportement par défaut consiste à utiliser un agent partagé.

Pour utiliser le -SkipErrors paramètre pour une publication spécifique, utilisez un agent indépendant, qui ne prend en charge qu’un seul abonnement. Pour utiliser un agent indépendant, suivez les étapes de votre version :

SQL Server 2000

  1. Dans SQL Server Entreprise Manager, cliquez avec le bouton droit sur la composition, cliquez sur Properties, puis sous l’onglet Options d’abonnement, cliquez sur l’option Utiliser un Agent de distribution indépendant d’une autre publication de cette base de données.

    Remarque

    Vous ne pouvez pas activer cette option après avoir ajouté des abonnements à cette publication.

  2. Ajoutez le -SkipErrors paramètre au Agent de distribution d’un abonnement spécifique.

SQL Server 2005 et SQL Server 2008

  1. Dans SQL Server Management Studio, accédez à Réplication, puis dans la section Publications locales, cliquez avec le bouton droit sur la composition, cliquez sur Propriétés, puis, dans la page Options d’abonnement, remplacez la valeur de Agent de distribution indépendant de False à True.

    Remarque

    Vous ne pouvez pas activer cette option après avoir ajouté des abonnements à cette publication.

  2. Ajoutez le -SkipErrors paramètre au Agent de distribution d’un abonnement spécifique.

Pour plus d'informations, consultez les articles suivants :