Назад | Перейти на главную страницу

Безопасная начальная синхронизация для репликации OLEDB / ODBC SQL Server

Я пытаюсь настроить одностороннюю репликацию транзакций с SQL Server 2008 R2 на PostgreSQL 9.1. Я пробую провайдер PGNP OLE DB.

Я могу успешно создать подписку, и транзакции действительно реплицируются на сервер PG. Я использую sync_type = 'none' в подписке, потому что в противном случае кажется, что в противном случае схема, включая специфические параметры SQL Server (SET ANSI_NULLS ON и т. Д.), Будет отправлена ​​в PostgreSQL, что испортит ее.

Это нормально, я могу использовать SSIS и копировать всю свою базу данных, включая данные. У меня вопрос, как я могу сделать это безопасным способом? Потому что, если я просто запустил пакет SSIS для экспорта данных, а затем добавлю подписку, транзакции могут быть потеряны.

Например. SSIS экспортирует данные в PG. Строка X обновлена. Репликация начинается. В этом случае обновление строки X не будет в моей ручной синхронизации, но репликация началась после. И я не могу запустить репликацию, потому что могут произойти другие ошибки.

Какая здесь правильная процедура?

У меня несколько раз возникала подобная проблема. Уловка для этого - настроить 2 подписки

  • Тот, который вы в настоящее время настроили
  • Другой - к базе данных sql server, которая будет синхронизироваться "нормально"

Итак, вот вся процедура:

  1. Сконфигурируйте подписчика sql server, синхронизируйте его как хотите, важно убедиться, что этот подписчик синхронизирован правильно
  2. Настройте репликацию на postgres. Позаботьтесь о том, чтобы все целевые таблицы были созданы в postgres, но не заботьтесь о синхронизации данных.
  3. На этом этапе, когда вы изменяете данные на первичном, они копируются на оба ведомых. Теперь ты перестань ЧИТАТЕЛЬ ЖУРНАЛОВ агент у Дистрибьютора. И вы ждете (например, благодаря монитору репликации), что оба агента подписки обработали все транзакции для обоих подписчиков.
  4. Усечь все реплицированные таблицы на подписчике POSTGRES
  5. Скопируйте все таблицы из подписчика SQL ( НЕ первичный сервер !! ) подписчику Postgres.
  6. У обоих подписчиков теперь точно такие же данные!
  7. Запустите агент чтения журнала. Вы сделали

Обратите внимание, что пока агент чтения журнала остановлен, транзакции на издателе будут зависать в журнале издателя. Так что будьте осторожны, чтобы он не разлился. Шаг 5 (копирование данных) может быть довольно длинным, поэтому настройте достаточно большой журнал на первичном (в зависимости от объема транзакции).

Кстати, если вы установите для sync_type значение «automatic», агент моментального снимка создаст снимок, который также будет правильно синхронизирован. Где моя награда?

Попробуйте эту статью Шпаргалка репликации SQL Server