O LSN especificado para verificação do log repldone ocorre antes do início atual da replicação no log

Microsoft.SQLServer.2008.SpecifiedLSNForRepldoneLogscanOccursBeforeTheCurrentStartOfReplicationInTheLogRule (Rule)

Knowledge Base article:

Resumo

O Número de Sequência de Log especificado para verificação do log repldone ocorre antes do início atual da replicação no log.

Causas

Há transações não replicadas no log de transações marcadas para replicação, mas não há Log Reader Agents atuais que possam ler essas transações não replicadas. O Log Reader Agent entrega comandos e transações replicados ao banco de dados de distribuição em transações. Após cada confirmação de transação, o Log Reader Agent chama o sp_repldone no banco de dados publicador para marcar informações, como o número da sequência da última transação distribuída e o registro da confirmação da próxima transação para verificação, se houver. Depois que o sp_repldone é chamado no banco de dados publicador e a transação é confirmada no banco de dados de distribuição, é possível que os dados de controle do banco de dados publicador tenham dados de controle incorretos.

Por exemplo, depois que o Log Reader confirmar com êxito uma transação (pode-se chamá-la de T1) no banco de dados de distribuição e o sp_repldone foi chamado para atualizar os dados de controle do banco de dados publicador para lembrar que T1 foi enviada e a transação T2 é a próxima a ser verificada, o Log Reader Agent irá para a transação T2. Se o Publicador for desligado imediatamente após o Log Reader Agent confirmar a transação T2 no banco de dados de distribuição, mas antes de o sp_repldone ser chamado para atualizar as informações de controle do banco de dados publicador, quando o Publicador voltar a funcionar, os dados de controle ainda indicarão que T1 acabou de ser enviado e T2 é a próxima a ser verificada. No entanto, essa indicação não é consistente com o fato de T2 já ter sido confirmada no banco de dados de distribuição. O Log Reader Agent manipula essa situação internamente. Na próxima inicialização do Log Reader Agent, ele consultará o banco de dados de distribuição para encontrar o número da sequência da última transação distribuída (LSN). Depois disso, ele chama o sp_repldone para redefinir os dados de controle do banco de dados publicador para que o conjunto de comandos e transações entregues não seja reenviado.

Esse erro poderá ser gerado se o número da sequência da transação no Log Reader Agent recuperado do banco de dados de distribuição for menor do que o último número da sequência da transação indicado por seus dados de controle. Essa condição indica que alguns comandos e transações enviados pelo Log Reader Agent estão ausentes no banco de dados de distribuição. Por exemplo, se a opção para sincronizar com backup não foi habilitada no banco de dados de distribuição, quando o banco de dados de distribuição foi restaurado para uma versão anterior enquanto o Log Reader Agent estava enviando comandos e transações a um banco de dados de distribuição. Outra causa possível é quando o usuário exclui manualmente alguns registros da tabela MSrepl_transactions no banco de dados de distribuição.

O erro também pode ocorrer se a replicação não foi completamente removida ou se houver uma inconsistência no banco de dados.

Resoluções

Para resolver esse problema, tente o seguinte:

Para garantir a consistência, descarte e recrie todas as publicações e assinaturas, se possível.

Element properties:

TargetMicrosoft.SQLServer.2008.DBEngine
CategoryEventCollection
EnabledFalse
Alert GenerateTrue
Alert SeverityError
Alert PriorityHigh
RemotableTrue
Alert Message
O LSN especificado para verificação do log repldone ocorre antes do início atual da replicação no log
{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>$Data/EventDescription$</AlertParameter1>
</AlertParameters>
<Suppression>
<SuppressionValue>$Data/LoggingComputer$</SuppressionValue>
<SuppressionValue>$Data/PublisherName$</SuppressionValue>
<SuppressionValue>$Data/EventDisplayNumber$</SuppressionValue>
</Suppression>
</WriteAction>
</WriteActions>
</Rule>