При устранении неполадок, связанных с синхронизацией отключенных устройств с центральным сервером базы данных, мы столкнулись с проблемой после обновления до SQL Server 2012 на сервере. Похоже, что CHANGE_TRACKING_MIN_VALID_VERSION возвращает значение на 1 больше, чем должно (или, по крайней мере, больше, чем до обновления).
Я проработал замечательный пример Аршада Али - пример простого примера.
Я запустил сценарии с № 1 по № 5 для вставки, удаления и обновления строки в таблице Employee как в среде SQL Server 2008, так и в среде 2012 года.
В 2008 году следующий оператор возвращает 0:
SELECT CHANGE_TRACKING_MIN_VALID_VERSION(OBJECT_ID('Employee'))
В 2012 году возвращается 1.
Работая с несколькими сценариями (6-8) в тестах, я установил период хранения равным 1 минуте, чтобы, надеюсь, принудительно выполнить очистку. Я ушел на день, и, видимо, он побежал в одночасье.
В примере 2008 года CHANGE_TRACKING_CURRENT_VERSION и CHANGE_TRACKING_MIN_VALID_VERSION равны (11). В экземпляре 2012 года CHANGE_TRACKING_MIN_VALID_VERSION на единицу выше (12), чем CHANGE_TRACKING_CURRENT_VERSION (11). Это может повлиять на процесс синхронизации, когда база данных простаивает в течение продолжительных периодов времени. И мы обнаружили, что процесс может попасть в цикл, особенно когда выполняется следующий тест, чтобы определить, требуется ли повторная инициализация, а не синхронизация:
IF CHANGE_TRACKING_MIN_VALID_VERSION(object_id(N'dbo.Employee')) > @sync_last_received_anchor
RAISERROR (N'SQL Server Change Tracking has cleaned up tracking information for table ''%s''...
Кто-нибудь еще испытывал это изменение в поведении? У кого-нибудь есть объяснение?