Я использую ApexSQL Diff API для синхронизации серверных и клиентских баз данных с разными семенами идентификации.После синхронизации я повторно заполнил обе базы данных.
Возникло состояние гонки.Если сервер добавляет новые строки после синхронизации, но перед повторным заполнением, они будут иметь неправильный идентификатор.ApexSQL управляет своими собственными подключениями к базе данных, поэтому я не могу выполнить синхронизацию внутри транзакции.
Пример:
- Повторное заполнение базы данных клиента до 1000.
- Повторное заполнение базы данных сервера до0.
- Добавьте три строки клиенту.У них есть ID 1000,1001,1002.
- Добавьте три строки на сервер.У них есть ID 0,1,2.
- Синхронизация.Теперь на сервере есть строки с идентификатором 0,1,2,1000,1001,1002.
- При добавлении строк клиента неявно переизбыток сервера до 1003.
- Строка добавлена на серверкаким-то другим процессом.У него есть идентификатор 1003.
- Клиент повторно устанавливает сервер на 3 ... слишком поздно!