[Déconseillé] Le LSN spécifié pour l'analyse du journal repldone est avant le début de la réplication dans le journal

Microsoft.SQLServer.2008.SpecifiedLSNForRepldoneLogscanOccursBeforeTheCurrentStartOfReplicationInTheLogRule (Rule)

Knowledge Base article:

Résumé

Le numéro séquentiel dans le journal spécifié pour l'analyse du journal repldone survient avant le début de réplication dans le journal.

Causes

Le journal des transactions contient des transactions non répliquées marquées pour la réplication, mais aucun Agent de lecture du journal n'est disponible pour les lire. L'Agent de lecture du journal livre des commandes et des transactions répliquées dans des transactions à la base de données de distribution. Chaque fois qu'une transaction est validée, l'Agent de lecture du journal appelle sp_repldone dans la base de données du serveur de publication pour marquer les informations comme le numéro de séquence de la dernière transaction distribuée et l'enregistrement de validation de la transaction suivante à analyser, le cas échéant. Comme sp_repldone est appelée dans la base de données du serveur de publication, après validation de la transaction dans la base de données de distribution, il est possible que certaines données de suivi de cette base de données soient incorrectes.

Par exemple, le lecteur du journal a validé avec succès une transaction (appelons-la T1) dans la base de données de distribution, et sp_repldone a été appelée pour mettre à jour les données de suivi de la base de données du serveur de publication pour mémoriser l'envoi de T1 et que la transaction T2 doit ensuite être analysée. L'Agent de lecture du journal passe alors à la transaction T2. Admettons que le serveur de publication soit arrêté immédiatement après la validation de la transaction T2 par l'Agent de lecture du journal dans la base de données de distribution, mais avant que sp_repldone ne soit appelé pour mettre à jour les informations de suivi de la base de données du serveur de publication. Lors du retour du serveur de publication, les données de suivi indiquent que la transaction T1 a été envoyée et que la transaction T2 doit être analysée ensuite. Cependant, cela ne correspond pas au fait que T2 ait déjà été validée dans la base de données de distribution. L'Agent de lecture du journal gère cette situation en interne. Lors du démarrage suivant de l'Agent de lecture du journal, il interroge la base de données de distribution afin d'obtenir le numéro de séquence de la dernière transaction distribuée (LSN). Ensuite, il appelle sp_repldone pour réinitialiser les données de suivi de la base de données du serveur de publication, pour que l'ensemble des commandes et des transactions fournies ne soit pas renvoyé.

Cette erreur peut être émise si le numéro de séquence de la transaction extrait par l'Agent de lecture du journal de la base de données de distribution est plus petit que celui de la dernière transaction fournie, comme indiqué par ses données de suivi. Cette condition signifie qu'il manque dans la base de données de distribution des commandes et des transactions envoyées par l'Agent de lecture du journal. Par exemple, si sync with backup n'a pas été activé dans la base de données de distribution, quand la base de données de distribution a été restaurée en fonction d'une version antérieure alors que l'Agent de lecture du journal avait fourni les commandes et les transactions à la base de données de distribution. Autre cause possible : l'utilisateur supprime manuellement des enregistrements de la table MSrepl_transactions de la base de données de distribution.

L'erreur peut également se produire si la réplication n'a pas été complètement supprimée ou si la base de données contenait une incohérence.

Solutions

Pour essayer de corriger ce problème, procédez comme suit :

Pour assurer la cohérence, supprimez et recréez, si possible, toutes les publications et tous les abonnements.

Paramètres remplaçables

Nom

Description

Valeur par défaut

Activé

Active ou désactive le flux de travail.

Non

Priorité

Définit la priorité de l'alerte.

2

Gravité

Définit la gravité de l'alerte.

2

Element properties:

TargetMicrosoft.SQLServer.2008.DBEngine
CategoryEventCollection
EnabledFalse
Alert GenerateTrue
Alert SeverityError
Alert PriorityHigh
RemotableTrue
Alert Message
Le LSN spécifié pour l'analyse du journal repldone survient avant le début de réplication dans le journal
{0}

Member Modules:

ID Module Type TypeId RunAs 
DS DataSource Microsoft.SQLServer.2008.EventProvider Default
GenerateAlert WriteAction System.Health.GenerateAlert Default

Source Code:

<Rule ID="Microsoft.SQLServer.2008.SpecifiedLSNForRepldoneLogscanOccursBeforeTheCurrentStartOfReplicationInTheLogRule" Target="SQL2008Core!Microsoft.SQLServer.2008.DBEngine" Enabled="false" ConfirmDelivery="true">
<Category>EventCollection</Category>
<DataSources>
<DataSource ID="DS" TypeID="Microsoft.SQLServer.2008.EventProvider">
<ComputerName>$Target/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/NetworkName$</ComputerName>
<PublisherName>$Target/Property[Type="SQL!Microsoft.SQLServer.DBEngine"]/ServiceName$</PublisherName>
<EventNumber>18768</EventNumber>
</DataSource>
</DataSources>
<WriteActions>
<WriteAction ID="GenerateAlert" TypeID="SystemHealth!System.Health.GenerateAlert">
<Priority>2</Priority>
<Severity>2</Severity>
<AlertMessageId>$MPElement[Name="Microsoft.SQLServer.2008.SpecifiedLSNForRepldoneLogscanOccursBeforeTheCurrentStartOfReplicationInTheLogRule.AlertMessage"]$</AlertMessageId>
<AlertParameters>
<AlertParameter1>Event ID: $Data/EventDisplayNumber$. $Data/EventDescription$</AlertParameter1>
</AlertParameters>
<Suppression>
<SuppressionValue>$Data/LoggingComputer$</SuppressionValue>
<SuppressionValue>$Data/PublisherName$</SuppressionValue>
<SuppressionValue>$Data/EventDisplayNumber$</SuppressionValue>
</Suppression>
</WriteAction>
</WriteActions>
</Rule>