Під час зйомки проблеми з синхронізацією від'єднаних пристроїв із центральним сервером баз даних, у нас виникає проблема після оновлення до SQL Server 2012 на сервері. Здається, що CHANGE_TRACKING_MIN_VALID_VERSION повертає значення на 1 вище, ніж слід (або принаймні, ніж це було до оновлення.)
Я працював через великий приклад Аршада Алі через приклад того, як створити простий приклад.
Я запустив скрипти з №1 до №5, щоб вставити, видалити та оновити рядок у таблиці Співробітник у середовищі 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''...
Хтось ще зазнав цієї зміни в поведінці? Хтось має пояснення?