Проблема
Хранимая процедура sp_replmonitorsubscriptionpendingcmds несовместима с одноранговой репликацией (P2P). Он возвращает неверное число ожидающих команд. После применения этого исправления sp_replmonitorsubscriptionpendingcmds будут совместимы с репликацией P2P.
Примечание Вкладка "Нераспределенные команды" монитора репликации вызывает sp_replmonitorsubscriptionpendingcmds за кулисами.
Решение
Сведения о накопительных обновлениях
Эта проблема устранена в следующих накопительных обновлениях для SQL Server:
- Накопительный пакет обновления 2 для SQL Server 2022 г.
- Накопительный пакет обновления 17 для SQL Server 2019
Примечание После применения этого накопительного обновления sp_replmonitorsubscriptionpendingcmds может по-прежнему сообщать о неправильном количестве ожидающих выполнения команд для репликации P2P, если таблица MSrepl_originators содержит устаревшие записи.
Если таблица MSrepl_originators содержит устаревшие записи, при выполнении sp_replmonitorsubscriptionpendingcmds в журнале ошибок SQL Server будет создано следующее предупреждающее сообщение:
Примечание
Предупреждение. Не удается получить версию базы данных для базы данных подписки "<database_name>". 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:
- Последнее накопительное обновление для SQL Server 2022 г.
- Последнее накопительное обновление для SQL Server 2019 г.
Состояние
Корпорация Майкрософт подтвердила, что это проблема продуктов Microsoft, перечисленных в разделе «Относится к».
Ссылки
Узнайте о терминологии, используемой корпорацией Майкрософт для описания обновлений программного обеспечения.