Синхронизация 2 баз данных SQL Server в обоих направлениях - PullRequest
1 голос
/ 10 мая 2019

Я пытаюсь синхронизировать 2 базы данных SQL-сервера из разных мест. Это сценарий. Скажем, серверы A и B имеют 10 мешков. Они изначально синхронизированы. Они не всегда связаны, но как только они появятся, я бы хотел, чтобы они внесли изменения друг в друга. Если в 10 часов утра с сервера A было получено 2 пакета, а в 10:10 с сервера B было получено 4 пакета, как только они будут подключены, на обоих серверах должно быть оставлено 4 пакета. Мне нужно, чтобы изменения фиксировались в хронологическом порядке независимо от того, когда они действительно синхронизируются. Итак, что происходит, когда они соединяются, 2 мешка вычитаются из 10, и они синхронизируются, что означает, что на серверах A и B остается 8 мешков. В 10:10 утра 4 мешка снова вычитаются из 8 левых, что делает окончательный считать до 4. Возможна ли эта настройка? Я попробовал Merge Replication, но он не синхронизируется так, как я хочу, чтобы он дал желаемые результаты. Возвращаясь к моему примеру с использованием репликации слиянием, если время синхронизации происходит каждые 15 минут, когда в 10 часов утра с сервера А берут 2 пакета, изменения по-прежнему не вносятся на другой сервер, поскольку время следующей синхронизации в 10:15, что также означает, что на сервере B по-прежнему имеется 10 мешков, а на сервере A - 8. В 10:15 утра учитываются только 4 мешка, взятые с сервера B, а окончательный счет в 10:15 для обоих серверов равен 6. Первое изменение в 10:00 утра игнорируется. Как я могу достичь желаемой настройки? Спасибо.

1 Ответ

1 голос
/ 10 мая 2019

Я бы положил Triggers в таблицу, которая отслеживает стеки в каждой базе данных, и каждый раз, когда вы вносите изменения, вы записываете запись в таблицу Synch с отметкой времени, изменениями, сервером, на котором произошло изменение и флаг, указывающий, была ли эта запись согласована. Затем, когда базы данных переподключаются, вы выбираете все не согласованные записи и применяете их по мере необходимости. Итак, в вашем сценарии у вас будет две записи:

Server A:
---------
10:00|-2|A|0

Server B:
---------
10:10|-4|B|0

Когда серверы повторно подключаются, Сервер A применяет любые изменения, которые ему не принадлежат, и Сервер B делает то же самое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...