KB5017009 — ИСПРАВЛЕНО: sp_replmonitorsubscriptionpendingcmds возвращает неверные ожидающие команды для репликации P2P

Применяется к
SQL Server 2019 on Windows SQL Server 2022 on Linux (all editions) SQL Server 2022 on Windows (all editions)

Проблема

Хранимая процедура sp_replmonitorsubscriptionpendingcmds несовместима с одноранговой репликацией (P2P). Он возвращает неверное количество ожидающих команд. После применения этого исправления sp_replmonitorsubscriptionpendingcmds будут совместимы с репликацией P2P.

Примечание Вкладка «Нераспределенные команды» монитора репликации вызывает sp_replmonitorsubscriptionpendingcmds в фоновом режиме.

Решение

Сведения о накопительном пакете обновления

Эта проблема устранена в следующих накопительных обновлениях для SQL Server:

Примечание После применения этого накопительного пакета обновления sp_replmonitorsubscriptionpendingcmds по-прежнему может сообщать о неправильном количестве ожидающих команд для репликации P2P, если таблица MSrepl_originators содержит устаревшие записи.

Если MSrepl_originators таблица содержит устаревшие записи, при запуске sp_replmonitorsubscriptionpendingcmds в журнале SQL Server ошибок появится следующее предупреждающее сообщение:

Примечание

Предупреждение! Не удалось получить версию базы данных подписки "<database_name>". The sp_replmonitorsubscriptionpendingcmds может сообщить о неправильном количестве ожидающих выполнения команд для репликации P2P.

Чтобы решить эту проблему, удалите устаревшие записи из MSrepl_originators или передайте правильную "dbversion" базы данных подписки в качестве аргумента subdb_version при запуске sp_replmonitorsubscriptionpendingcmds.

Совет

Вы можете выбрать один из следующих методов, чтобы найти "dbversion" базы данных подписки:

  • Выполните следующий запрос к базе данных распространения: select dbversion from MSrepl_originators
    where publisher_database_id = <Publisher_Database_ID>
    and srvname = <Subscriber_Server>
    and dbname = <Subscriber_Database>
    Примечание Вам нужно подставить соответствующие значения для <Publisher_Database_ID> , <Subscriber_Server> и <Subscriber_Database>.
  • Выполните следующий запрос к базе данных подписки: 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

Сведения о накопительных обновлениях для SQL Server

Каждый новый накопительный пакет обновления для SQL Server содержит все исправления и исправления безопасности, которые были в предыдущей сборке. Рекомендуется установить последнюю сборку для вашей версии SQL Server.

Состояние

Корпорация Майкрософт подтвердила, что это проблема продуктов Microsoft, перечисленных в разделе «Относится к».

Ссылки

Узнайте о терминологии, используемой корпорацией Майкрософт для описания обновлений программного обеспечения.