Я недавно установил индивидуальную репликацию для своей базы данных подписчиков, как описано в другой пост здесь. Обычно, когда издатель отправляет подписчикам новую запись, хранимая процедура также вставляет реплицированное время в дополнительный столбец таблицы и вставляет новую запись в таблицу журнала.
Моя проблема возникает при попытке реплицировать таблицу журнала обратно в основную базу данных публикации. Вот что я сделал:
- В базе данных, где находится таблица журнала, я настраиваю новую репликацию транзакций и настраиваю ее для создания моментального снимка.
- После создания публикации я создаю новую принудительную подписку и устанавливаю ее немедленную инициализацию.
- После создания подписки я проверил статус синхронизации и подтвердил, что моментальный снимок применен успешно.
А теперь самое странное: если я вручную добавлю запись в таблицу журнала с помощью SQL Server Management Studio, запись будет реплицирована нормально. Если запись добавлена настраиваемой хранимой процедурой репликации, этого не произойдет. Статус всегда будет отображать «Реплицированные транзакции недоступны».
Я понятия не имею, почему публикация ведет себя таким образом: я действительно не понимаю, как она по-разному обрабатывает данные, вставленные настраиваемой хранимой процедурой репликации.
Может кто-нибудь объяснить, что я сделал не так?
ОБНОВЛЕНИЕ: у меня наконец-то есть ответ на эту проблему несколько месяцев назад, просто у меня не было времени обновить этот вопрос. Нам нужно зарегистрировать звонок в службу поддержки Microsoft, но у нас есть рабочее решение.
ОТВЕТ: Для решения проблемы при добавлении подписки вам необходимо запустить скрипт, как показано ниже:
sp_addsubscription @publication = 'TEST', ..., @loopback_detection = 'false'
Ключ к решению - последний параметр, показанный выше. По умолчанию сгенерированный скрипт подписки не имеет этого параметра.