La replica del database è in corso da parte di un altro agente di lettura dei log.
È in corso da parte di più connessioni il tentativo di eseguire una delle procedure seguenti: sp_repldone, sp_replcmds o sp_replshowcmds. Le stored procedure sp_repldone and sp_replcmds vengono utilizzate dall'agente di lettura log per individuare e aggiornare le informazioni sulle transazioni replicate in un database pubblicato. La stored procedure sp_replshowcmds viene utilizzata per la risoluzione di alcuni tipi di problemi relativi alla replica transazionale.
Questo errore viene generato nelle circostanze seguenti:
Se l'agente di lettura log di un database pubblicato è in esecuzione e un secondo agente di lettura log tenta l'esecuzione sullo stesso database, per il secondo agente viene generato l'errore, che appare nella cronologia dell'agente.
In una situazione in cui compaiono più agenti, è possibile che uno di loro sia il risultato di un processo orfano.
Se l'agente di lettura log di un database pubblicato viene avviato e un utente esegue sp_repldone, sp_replcmds o sp_replshowcmds sullo stesso database, viene generato l'errore nell'applicazione in cui è stata eseguita la stored procedure (ad esempio sqlcmd).
Se l'agente di lettura log di un database pubblicato viene avviato e un utente esegue sp_repldone, sp_replcmds o sp_replshowcmds e non chiude la connessione su cui è stata eseguita la procedura, quando l'agente di lettura log tenta di connettersi al database viene generato l'errore.
Si noti che in una situazione in cui sono presenti più agenti, uno di questi può essere il risultato di un processo isolato che non viene visualizzato come processo o agente aggiuntivo in Management Studio.
I passaggi seguenti possono contribuire alla risoluzione del problema. Se uno dei passaggi consente l'avvio senza errori dell'agente di lettura log, non è necessario completare i passaggi rimanenti.
Verificare nella cronologia dell'agente di lettura log la presenza di eventuali altri errori che potrebbero contribuire a questo errore. Per informazioni sui dettagli di stato e di errore dell'agente di visualizzazione in monitoraggio replica, vedere "procedura: Visualizzare le informazioni ed eseguire attività per gli agenti associati a una pubblicazione (monitoraggio replica)" nella documentazione online di SQL Server.
Verificare nell'output di sp_who la presenza di numeri di identificazione di processo (SPID) connessi al database pubblicato. Chiudere le connessioni che potrebbero aver eseguito sp_repldone, sp_replcmds o sp_replshowcmds.
Riavviare l'agente di lettura log. Per ulteriori informazioni, vedere "procedura: Avviare e arrestare un agente di replica (SQL Server Management Studio)" nella documentazione online di SQL Server.
Riavviare il servizio Agent (metterlo offline oppure online in un cluster) sul database di distribuzione. Se vi è una possibilità che un processo pianificato abbia eseguito sp_repldone, sp_replcmds o sp_replshowcmds da altre istanze, riavviare l'Agent anche per tali istanze. Per ulteriori informazioni, vedere l'argomento "Avvio, arresto e sospensione del servizio SQL Server Agent" nella documentazione online di SQL Server 2012.
Eseguire sp_replflush nel server di pubblicazione sul database di pubblicazione, quindi riavviare l'agente di lettura log.
Se l'errore continua a verificarsi, aumentare il livello di dettaglio per la registrazione delle operazioni dell'agente e specificare un file di output per il log. A seconda del contesto dell'errore, in questo modo si potrebbero ottenere ulteriori informazioni sui passaggi che conducono all'errore e/o messaggi di errore aggiuntivi. Per ulteriori informazioni, vedere "Agenti di replica (Risoluzione dei problemi)" nella documentazione online di SQL Server.
Target | Microsoft.SQLServer.2008.DBEngine | ||
Category | EventCollection | ||
Enabled | True | ||
Alert Generate | True | ||
Alert Severity | Error | ||
Alert Priority | High | ||
Remotable | True | ||
Alert Message |
|
ID | Module Type | TypeId | RunAs |
---|---|---|---|
DS | DataSource | Microsoft.SQLServer.2008.EventProvider | Default |
GenerateAlert | WriteAction | System.Health.GenerateAlert | Default |
<Rule ID="Microsoft.SQLServer.2008.AnotherLogReaderIsReplicatingDatabaseRule" Target="SQL2008Core!Microsoft.SQLServer.2008.DBEngine" Enabled="true" 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>18752</EventNumber>
</DataSource>
</DataSources>
<WriteActions>
<WriteAction ID="GenerateAlert" TypeID="SystemHealth!System.Health.GenerateAlert">
<Priority>2</Priority>
<Severity>2</Severity>
<AlertMessageId>$MPElement[Name="Microsoft.SQLServer.2008.AnotherLogReaderIsReplicatingDatabaseRule.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>