Как сохранить CHANGE_TRACKING_CURRENT_VERSION при использовании SQL Отслеживание изменений сервера? - PullRequest
0 голосов
/ 24 апреля 2020

Я использую отслеживание изменений в SQL Server (15) на одной таблице. Мое клиентское приложение запускается каждые x минут и проверяет, были ли изменены данные таблицы, чтобы сделать недействительным какой-либо кэш. В рамках одной транзакции клиент сначала получает текущую версию отслеживания изменений (CHANGE_TRACKING_CURRENT_VERSION()), а затем запрашивает изменения по сравнению с тем, когда ранее выполнялся клиент. Клиент знает, что было предыдущим значением CHANGE_TRACKING_CURRENT_VERSION(), потому что он сохраняет свое значение в отдельной таблице (той же базы данных) после успешного запуска. Поэтому, когда клиент готов, клиент перезаписывает предыдущую версию отслеживания изменений текущей.

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

Например, допустим, сохраненная версия равна 5, а текущая версия - 6. Клиент запустится и в конечном итоге перезапишет сохраненную версию текущей версией. Теперь сохраненное значение равно 6, но поскольку сохранение этого значения считается изменением SQL Отслеживание изменений сервера, текущей версией отслеживания изменений станет 7. При следующем запуске клиент снова запустится (так как 7 больше, чем 6) и это в конечном итоге перезапишет сохраненную версию текущей версией. Он будет go включаться вечно.

Есть ли способ решить эту проблему, не сохраняя предыдущую версию отслеживания изменений в другой базе данных?

1 Ответ

0 голосов
/ 24 апреля 2020

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

...