Problembeschreibung
Die sp_replmonitorsubscriptionpendingcmds gespeicherte Prozedur ist nicht mit der Peer-to-Peer-Replikation (P2P) kompatibel. Es gibt die falsche Anzahl ausstehender Befehle zurück. Nachdem Sie diesen Fix angewendet haben, ist sp_replmonitorsubscriptionpendingcmds mit der P2P-Replikation kompatibel.
Hinweis Die Registerkarte "Nicht verteilte Befehle" eines Replikationsmonitors ruft sp_replmonitorsubscriptionpendingcmds im Hintergrund auf.
Lösung
Informationen zum kumulativen Update
Dieses Problem wurde im folgenden kumulativen Update für SQL Server behoben:
Kumulatives Update 17 für SQL Server 2019
Hinweis Nachdem Sie dieses kumulative Update angewendet haben, melden sp_replmonitorsubscriptionpendingcmds möglicherweise weiterhin eine falsche Anzahl ausstehender Befehle für die P2P-Replikation, wenn die MSrepl_originators Tabelle veraltete Einträge enthält.
Wenn die MSrepl_originators Tabelle veraltete Einträge enthält, wird beim Ausführen sp_replmonitorsubscriptionpendingcmds die folgende Warnmeldung im SQL Server-Fehlerprotokoll generiert:
Warnung: Die Datenbankversion für die Abonnementdatenbank "<database_name> " kann nicht abgerufen werden. Die sp_replmonitorsubscriptionpendingcmdsmeldet möglicherweise die falsche Anzahl ausstehender Befehle für die P2P-Replikation.
Um dieses Problem zu beheben, löschen Sie entweder die veralteten Einträge aus MSrepl_originators oder übergeben die richtige "dbversion" einer Abonnementdatenbank als subdb_version Argument , wenn Sie sp_replmonitorsubscriptionpendingcmds ausführen.
Tipps: Sie können eine der folgenden Methoden auswählen, um die "dbversion" einer Abonnementdatenbank zu finden:
-
Führen Sie die folgende Abfrage für eine Verteilungsdatenbank aus: select dbversion from MSrepl_originators
where publisher_database_id = <Publisher_Database_ID>
and srvname = <Subscriber_Server>
and dbname = <Subscriber_Database>
Hinweis Sie müssen geeignete Werte für <Publisher_Database_ID>, <Subscriber_Server> und <Subscriber_Database> ersetzen. -
Führen Sie die folgende Abfrage für eine Abonnementdatenbank aus: declare @current_version int , @currentGuid uniqueidentifier
select @currentGuid = recovery_fork_guid
from sys.database_recovery_status
where database_id = db_id()
select @current_version = substring(convert(binary(16), isnull(@currentGuid, 0x0)),1,6)
print @current_version
Jedes neue kumulative Update für SQL Server enthält alle Hotfixes und Sicherheitsfixes, die im vorherigen Build vorhanden waren. Es wird empfohlen, den neuesten Build für Ihre Version von SQL Server zu installieren:
Status
Microsoft hat bestätigt, dass es sich hierbei um ein Problem bei den in diesem Artikel genannten Microsoft-Produkten handelt.
Informationsquellen
Erfahren Sie mehr über die Terminologie, die Microsoft verwendet, um Softwareupdates zu beschreiben.