[Deprecato] Il numero LSN specificato per l'analisi del log delle repliche completate è precedente all'inizio corrente della replica nel log

Microsoft.SQLServer.2008.SpecifiedLSNForRepldoneLogscanOccursBeforeTheCurrentStartOfReplicationInTheLogRule (Rule)

Knowledge Base article:

Riepilogo

Il numero di sequenza del file di log (LSN) specificato per l'analisi del log delle repliche completate è precedente all'inizio corrente della replica nel log.

Cause

Nel log delle transazioni sono presenti transazioni non replicate contrassegnate per la replica, ma al momento non esistono agenti di lettura log in grado di leggerle. L'agente di lettura log fornisce comandi e transazioni replicati al database di distribuzione all'interno delle transazioni. Dopo il commit di ogni transazione, l'agente chiama sp_repldone nel server di pubblicazione per contrassegnare informazioni quali il numero di sequenza dell'ultima transazione distribuita e il record di commit dell'eventuale transazione successiva da analizzare. Poiché sp_repldone viene chiamata nel server di pubblicazione dopo che è stato eseguito il commit della transazione nel database di distribuzione, è possibile che i dati di verifica del server di pubblicazione non siano corretti.

Ad esempio, dopo che l'agente di lettura log ha completato il commit di una transazione (T1) nel database di distribuzione e dopo che sp_repldone è stata chiamata per aggiornare i dati di verifica del server di pubblicazione per indicare che T1 è stata inviata e la transazione T2 è la successiva transazione da sottoporre ad analisi, l'agente lettura log passa alla transazione T2. Se il server di pubblicazione viene arrestato subito dopo il commit della transazione T2 nel database di distribuzione, ma prima che sp_repldone venga chiamata per aggiornare le informazioni di verifica del server di pubblicazione, quando il server di pubblicazione sarà riavviato i dati di verifica indicheranno ancora che T1 è appena stata inviata e T2 è in attesa di analisi. In questo modo si verifica tuttavia un'incoerenza con il fatto che il commit di T2 è già stato eseguito nel database di distribuzione. L'agente di lettura log gestisce la situazione a livello interno. All'avvio successivo, l'agente di lettura log invierà una query al database di distribuzione per ottenere il numero di sequenza dell'ultima transazione distribuita (LSN), quindi chiamerà sp_repldone per reimpostare i dati di verifica del server di pubblicazione in modo da impedire che il set di comandi e transazioni già recapitato venga inviato di nuovo.

Questo errore può verificarsi se il numero di sequenza della transazione recuperato dall'agente di lettura log dal database di distribuzione è minore del numero di sequenza dell'ultima transazione recapitata indicato nei dati di verifica. Questa condizione indica che nel database di distribuzione mancano alcuni comandi e transazioni precedentemente inviati dall'agente di lettura log. È ad esempio possibile che l'opzione sync with backup non fosse abilitata nel database quando il database di distribuzione è stato ripristinato a una versione precedente mentre l'agente di lettura log recapitava i comandi e le transazioni al database di distribuzione. Un'altra possibile causa potrebbe essere stata l'eliminazione manuale da parte dell'utente di alcuni record della tabella MSrepl_transactions del database di distribuzione.

L'errore può inoltre verificarsi se la replica è stata rimossa in modo incompleto o se si sono verificati problemi di coerenza nel database.

Soluzioni

Per risolvere il problema, procedere come segue:

Per garantire la coerenza, se possibile eliminare e ricreare tutte le pubblicazioni e sottoscrizioni.

Parametri di cui è possibile eseguire l'override

Nome

Descrizione

Valore predefinito

Abilitato

Abilita o disabilita il flusso di lavoro.

No

Priorità

Definisce la priorità dell'avviso.

2

Gravità

Definisce la gravità dell'avviso.

2

Element properties:

TargetMicrosoft.SQLServer.2008.DBEngine
CategoryEventCollection
EnabledFalse
Alert GenerateTrue
Alert SeverityError
Alert PriorityHigh
RemotableTrue
Alert Message
Il numero LSN specificato per l'analisi del log delle repliche completate è precedente all'inizio corrente della replica nel 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>