[Preterido] 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á Agentes de Leitor de Log atuais que possam ler essas transações não replicadas. O Agente de Leitor de Log 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 Agentes de Leitor de Log 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 rastreamento do banco de dados publicador tenham dados de rastreamento incorretos.

Por exemplo, depois que o Leitor de Log confirmar com êxito uma transação (pode-se chamá-la de T1) no banco de dados de distribuição e o sp_repldone tiver sido chamado para atualizar os dados de rastreamento do banco de dados publicador para lembrar que T1 foi enviada e a transação T2 é a próxima a ser verificada, o Agente de Leitor de Log passará para a transação T2. Se o Publicador for desligado imediatamente após o Agente de Leitor de Log 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 rastreamento do banco de dados publicador, quando o Publicador voltar a funcionar, os dados de rastreamento 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 Agente de Leitor de Log manipula essa situação internamente. Na próxima inicialização do Agente de Leitor de Log, 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 rastreamento 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 Agente de Leitor de Log 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 rastreamento. Essa condição indica que alguns comandos e transações enviados pelo Agente de Leitor de Log 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 Agente de Leitor de Log 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 poderá ocorrer se a replicação não tiver sido 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.

Parâmetros Substituíveis

Nome

Descrição

Valor Padrão

Habilitado

Habilita ou desabilita o fluxo de trabalho.

Não

Prioridade

Define a Prioridade do Alerta.

2

Severidade

Define a Severidade do Alerta.

2

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>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>