У меня есть производственная база данных, в которой происходят постоянные обновления, и я настроил ее публикацию на другом сервере с помощью транзакционной репликации.
При настройке репликации транзакций я делаю следующее:
- отключить доступ к исходной базе данных
- резервное копирование исходной базы данных с последующим восстановлением на сервере подписки
- настроить репликацию
- повторно включить доступ к БД для наших приложений
Проблема этого подхода заключается в планировании простоев, в приостановке всех запланированных задач, которые мы запускаем, и в закрытии доступа к различным приложениям, зависящим от этой базы данных.
Могу ли я просто настроить репликацию транзакций, не отключая доступ к базе данных публикации, и база данных подписчика будет корректно подтягиваться? То есть все ли операторы DML ставятся в очередь на издателе и как только подписчик готов, они выбираются и выполняются?
решение1
Простой ответ — нет... Вам не нужно отключать доступ к системе и т. д. Вот почему и как это работает... Когда вы настраиваете репликацию, издатель создает снимок данных в тот самый момент, когда вы создаете публикацию. Также есть Log Reader, который работает одновременно с транзакционной репликацией, которая перехватывает КАЖДУЮ транзакцию с момента создания последнего снимка. Итак... когда создается подписчик, это в основном двухэтапный процесс:
Шаг 1: Снимок применяется к подписчику, что создает схему и данные в базе данных подписчика.
Шаг 2: Затем транзакции с момента снимка применяются к подписчику для обновления базы данных подписчика последними данными.
Так что, по сути, вам не нужно делать все то, что вы делаете для создания нового подписчика.
Дай мне знать если тебе нужно что-нибудь еще.
Спасибо!
-ВМ