Синхронизация данных между двумя серверами Diff SQL - PullRequest
3 голосов
/ 02 октября 2010

У меня есть два SQL-сервера, которые должны быть идентичными. Синхронизация должна происходить, может быть, пару раз в день, автоматически. Два сервера не имеют «прямой» связи между ними, поэтому нет связанных дБ и т. Д. (Они находятся на совершенно разных машинах, в сетях, доменах, с межсетевыми экранами и т. Д.) Однако вы можете использовать Интернет, как веб-служба, FTP ...

CopyFromDB содержит много таблиц, но только около 20 таблиц (только данные, пока нет изменений схемы) должны быть синхронизированы с CopyToDB. Только около половины таблиц будут иметь новые / обновленные строки каждый день. Остальные пару раз в год. Я предполагаю, что сейчас это всего лишь пара тысяч строк в день. Однако в будущем это может возрасти до 100 000 строк в день. Так что, возможно, не слишком много данных, я думаю.

А также (на данный момент может измениться) данные должны синхронизироваться только одним способом, от CopyFromDB до CopyToDB. Было бы также неплохо, если бы он не «ломался» только потому, что кто-то добавляет дополнительный столбец в таблицу на CopyFromDB, но этот новый столбец не должен синхронизироваться с CopyToDB автоматически. (Только столбцы, которые должны быть синхронизированы, находятся на CopyToDB, могут быть другие столбцы, которые не должны синхронизироваться)

Это должно сделать Вставить, Обновить или Вставить. В худшем случае я предполагаю, что это может полностью удалить и вставить, но мне это не нравится. (Конечно, есть FK и т. Д., Поэтому данные должны быть вставлены в правильном порядке)

На данный момент существует только один «CopyToDB», но это может увеличиться. Решение также должно быть достаточно простым и не слишком сложным. : -)

У меня вопрос; что было бы лучшим способом сделать это? У меня есть пара идей ниже.

  • WS на стороне CopyToDB, вызывается со стороны CopyFromDB службой или чем-то еще? Нажатие данных, только изменения с момента последней синхронизации.
  • FTP на стороне CopyToDB, которая принимает "sql" -файл с изменениями. Как вставить / обновить / удалить. Это выдвигается там CopyFromDB.
  • Что-то еще? Встроенный инструмент, который уже делает это? Или инструмент для 3d детали? Что-то вроде Red Gate SQL Data Compare, только автоматически.

Спасибо за ваши мысли и / или ответы!


Я искал на форуме свой вопрос. Но я могу только найти вопросы, когда два сервера имеют какое-то «прямое» соединение между ними или вы делаете резервное копирование / восстановление. Но если на этот вопрос уже был дан ответ, прошу прощения, и не могли бы вы сказать мне, где? :)

Ответы [ 5 ]

3 голосов
/ 19 августа 2013

Поздно, но, надеюсь, другие читатели найдут это полезным ...

Не уверен, что вы уже знали, но вы можете легко автоматизировать сравнение данных SQL через интерфейс командной строки. Это требует дополнительной лицензии и поставляется с ценой, но это определенно возможно.

Я успешно использовал ApexSQL Data Diff для аналогичных проектов, где требуется ежедневная синхронизация данных.

Оба инструмента на высшем уровне. Вы не можете ошибиться с любым из них ... Red Gate, кажется, удобнее в использовании, но у Apex больше опций и он работает немного быстрее.

Отказ от ответственности: я не связан ни с одним из двух поставщиков, упомянутых в этом посте, но у меня был шанс использовать оба в компаниях, на которые я работал.

1 голос
/ 14 октября 2010

Написать Web-сервис для него и использовать утилиту, такую ​​как TableDiff для данных и OpenDBDiff для схемы Нет другого более простого способа.

1 голос
/ 18 октября 2010

Если репликация идет в одну сторону, используйте доставку журналов.Основной сервер может создавать резервные копии журналов по любому пути UNC, а затем вы можете использовать любые инструменты синхронизации файлов для управления передачей журналов с одного сервера на другой.Подписчик просто автоматически восстанавливает любые резервные копии журналов транзакций, которые он находит в своей локальной папке.

Подписчик будет доступен только для чтения, но это именно то, что вы хотите - в противном случае, если кто-то может обновить записи на подписчике, вы 'мы окажемся в мире боли.

0 голосов
/ 22 октября 2010

Если у вас есть доступ к проектам Visual Studio DataBase, вы можете настроить задачу сборки (если вы используете систему сборки), которая может генерировать различия в T-SQL. Затем это вопрос доставки различий и их применения, но это гораздо более простая задача (WCF, электронная почта, что угодно).

Единственный прием - убедиться, что ваша база данных разработки / изменения и целевая база данных имеют одинаковую схему при запуске этого процесса.

Однако, если вы можете использовать технологию репликации, я бы настоятельно рекомендовал бы это. Несмотря на то, что вы можете внедрить собственное решение, управление им в будущем станет кошмаром. Работать сейчас не сложно. Убедиться, что он будет работать в течение следующих XX лет.

Erick

0 голосов
/ 02 октября 2010

Вы можете использовать FTP-доставку с репликацией SQL Server: Как: доставить снимок через FTP (программирование репликации на Transact-SQL)

...