В мониторе репликации появляется следующая ошибка:
Строка не найдена на подписчике при применении реплицированной команды UPDATE для таблицы '[dgv]. [POSCustomer]' с первичным ключом =
Ошибка на самом деле не в отсутствующей строке, а в том, что в схеме таблицы указано dgv
.
Предполагается, что публикация, сгенерировавшая ошибку, будет реплицирована только на [ppv].[POSCustomer]
и даже не должна знать о [dgv].[POSCustomer]
.И затрагиваются только строки, созданные ПОСЛЕ первоначального снимка.
Фон:
Я настраиваю репликацию транзакций для 3 локальных баз данных PPV
DGV
и PAC
для одной базы данных SQL Azure.
Три базы данных принадлежат разным юридическим лицам на двух отдельных серверах (PPV
на одном, DGV
и PAC
на другом) и имеют идентичные схемы.
Таблицы с одинаковыми именами из каждого dbs
настроены для репликации.
Чтобы дифференцировать их в целевых БД, я поместил их в три разные схемы, используя название их исходных БД, т.е. ppv.POSCustomer
, dgv.POSCustomer
, pac.POSCustomer
.
Это делается путем изменения настройки Publication properties -> Articles -> Article properties -> Destination
владельца объекта.
Исходные снимки доставляются без проблем;однако через некоторое время row was not found
начал появляться в мониторе репликации.
Я пытался повторно инициализировать подписки несколько раз, но ошибка продолжает появляться после доставки снимка.
Все строки, созданные после доставки снимков, будут затронуты.
Базы данных полностью изолированы друг от друга, нет перекрестных запросов к базе данных, нет хранимых процедур, нет триггеров, которые говорят, что запись из PPV.dbo.POSCustomer
должна быть обновлена в DGV.dbo.POSCustomer
, так что я нахожусь наПотеря как причина этой ошибки.
Я использовал sp_browsereplcmd
, чтобы отследить команду, которая вызвала ошибку, что приводит меня к:
{CALL [sp_MSupd_dboPOSCustomer] (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 2019-05-14 00: 00: 00.000,, 27280000.0000,10 ,,,,,,,,,,, 2019-05-14 18: 30: 04.000 ,,,,,,,,,,,,,,,,,,,, N'vinhn4-00001395 ', 0x00000000d000080000)}
, который я не понимаю, и sp
не является частью нашего POS
приложения.
Как я могу устранить эту ошибку?Вставка пропущенных строк вручную не будет работать, поскольку затронуты все новые строки.Включение -skiperrors не вариант.Раньше репликация в разные целевые базы данных была успешно выполнена, но настройка межбазы данных является такой проблемой в Azure SQL, что я предпочел бы избегать \ если возможно.