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