Partager via


Omission des erreurs lors de la réplication transactionnelle

Pour la réplication transactionnelle, il existe deux moyens d'ignorer les erreurs rencontrées durant le processus de distribution :

  • Le paramètre -SkipErrors de l'Agent de distribution, qui vous permet d'ignorer les erreurs d'un certain type. La transaction concernée par l'erreur n'est pas validée, mais les transactions suivantes le sont.

  • La procédure stockée sp_setsubscriptionxactseqno, qui vous permet d'ignorer une ou plusieurs transactions qui causent des erreurs. Cette option n'est pas disponible pour les Abonnés non-SQL Server.

Important

Dans un traitement de réplication classique, vous ne devez pas rencontrer d'erreurs nécessitant d'être ignorées. N'omettez une erreur qu'avec précaution et en sachant en quoi consiste l'erreur, pourquoi elle se produit et pourquoi il est préférable d'ignorer plutôt que de résoudre cette erreur ou cette transaction spécifique. Si des transactions validées dans le serveur de publication sont ignorées dans l'Abonné, les deux nœuds ne seront pas intégralement synchronisés, ce qui risque d'entraîner de nouvelles erreurs.

Le paramètre -SkipErrors

Par défaut, lorsque l'Agent de distribution rencontre une erreur, il s'arrête. Si vous utilisez le paramètre -SkipErrors et si vous spécifiez des erreurs possibles ou des erreurs dont vous ne souhaitez pas qu'elles gênent la réplication, l'Agent consigne les informations relatives à ces erreurs et poursuit son exécution. Par exemple, si vous voulez spécifier que l'Agent de distribution doit consigner les violations de clés en double mais poursuivre le traitement des transactions suivantes, spécifiez que l'agent doit ignorer les erreurs 2601 (Impossible d'insérer une ligne de clé en double dans l'objet '%.*ls' avec un index unique ''%.*ls') et 2627 (Violation de %ls contrainte '%.*ls'. Impossible d'insérer une clé dupliquée dans l'objet '%.*ls'.) :

-SkipErrors 2601;2627

La façon la plus courante d'utiliser le paramètre -SkipErrors consiste à utiliser le profil d'Agent de distribution intitulé Continuer avec les erreurs de cohérence des données. L'Agent de distribution ignorera alors les erreurs 2601, 2627 et 20598 (La ligne n'a pas été trouvée chez l'Abonné lorsque la commande répliquée est appliquée). Pour plus d'informations, consultez Profils de l'Agent de réplication. Outre ce profil prédéfini, vous pouvez spécifier le paramètre dans un profil d'agent que vous créez ou que vous modifiez, ou sur la ligne de commande. Pour plus d'informations, consultez :

Important

Par défaut, les déclencheurs s'exécutent avec le paramètre XACT_ABORT défini à ON. Si une instruction dans un déclencheur provoque une erreur alors que l'Agent de distribution est en train d'appliquer des changements à l'Abonné, le traitement complet de changements échouera, et non pas seulement l'instruction incriminée. Dans une réplication transactionnelle, vous pouvez utiliser le paramètre -SkipErrors de l'Agent de distribution pour ignorer les instructions qui provoquent des erreurs. Si vous utilisez -SkipErrors avec XACT_ABORT ON, le traitement complet de changements est ignoré si une instruction provoque une erreur. À moins que vous n'ayez besoin que XACT_ABORT soit défini à ON dans les déclencheurs, nous vous recommandons de le définir à OFF si vous utilisez le paramètre -SkipErrors. Pour définir cette option à OFF, spécifiez SET XACT_ABORT OFF dans la définition du déclencheur. Pour plus d'informations sur XACT_ABORT, consultez SET XACT_ABORT (Transact-SQL).

La procédure stockée sp_setsubscriptionxactseqno

La procédure stockée sp_setsubscriptionxactseqno peut être utilisée pour ignorer une ou plusieurs transactions qui causent des erreurs lors de leur application sur l'Abonné. S'il se produit un échec et si vous voulez ignorer une ou plusieurs transactions :

  1. Exécutez sp_helpsubscriptionerrors sur le serveur de distribution après l'arrêt de l'Agent de distribution. Cette procédure stockée renvoie la colonne xact_seqno, qui contient le numéro séquentiel dans le journal (LSN) de chaque transaction ayant échoué.

  2. Exécutez sp_setsubscriptionxactseqno, en spécifiant une valeur pour le paramètre @xact_seqno. Si vous souhaitez ignorer toutes les transactions qui ont échoué, spécifiez le numéro de séquence d'enregistrement le plus élevé renvoyé par sp_helpsubscriptionerrors.

Pour plus d'informations, consultez sp_setsubscriptionxactseqno (Transact-SQL) et sp_helpsubscriptionerrors (Transact-SQL).