Я хотел бы представить вам мою проблему, связанную с двунаправленной репликацией SQL Server 2005.
Что мне нужно?
Мой руководитель группы хочет решить одну из наших проблем, используя двунаправленную репликацию между двумя базами данных, каждая из которых используется различным приложением. Одно приложение создает записи в таблице A, изменения должны копироваться во вторую базу данных в копию таблицы A. Когда данные на втором сервере изменяются, эти изменения должны распространяться обратно на первый сервер.
Я пытаюсь добиться двунаправленной репликации транзакций между двумя базами данных на одном сервере, на котором выполняется SQL Server 2005. Мне удалось настроить это с помощью сценариев, создано 2 публикации и 2 подписки только для чтения с обнаружением обратной петли. Создана распределительная база данных, включена публикация в обеих базах. Дистрибьютор и издатель вышли. Мы используем некоторые правила для контроля, какие записи будут реплицироваться, поэтому нам нужно вызывать наши пользовательские хранимые процедуры во время репликации. Таким образом, статьи настроены на использование обновления, вставки и удаления пользовательских хранимых процедур.
Пока все хорошо, но?
Все работает нормально, изменения реплицируются, пока обновления не будут выполнены для обеих таблиц одновременно или до того, как изменения будут реплицированы (и это занимает около 3-6 секунд). В результате обе записи получат разные значения.
UPDATE db1.dbo.TestTable SET Col = 4 WHERE ID = 1
UPDATE db2.dbo.TestTable SET Col = 5 WHERE ID = 1
Результаты до:
db1.dbo.TestTable COL = 5
db2.dbo.TestTable COL = 4
Но мы хотим, чтобы репликация победила в последнем изменении. Пожалуйста, есть ли способ решить мою проблему? Как я могу обеспечить одинаковые значения в обеих записях? Или есть более простое решение, чем этот тип репликации?
Я могу предоставить образец сценария репликации, который я использую.
Я с нетерпением жду ваших идей,
Мирек