Чи змінилися внутрішні засоби відстеження змін від SQL Server 2008 до 2012?


9

Під час зйомки проблеми з синхронізацією від'єднаних пристроїв із центральним сервером баз даних, у нас виникає проблема після оновлення до 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''...

Хтось ще зазнав цієї зміни в поведінці? Хтось має пояснення?


2
Для цього випуску є елемент Microsoft Connect, connect.microsoft.com/SQLServer/feedback/details/770014/… в основному Microsoft вважає, що проблема може бути пов’язана з пошкодженням у відповідній базі даних. Чи можете ви спростувати цю ситуацію в новоствореній базі даних?
Макс Вернон

1
Макс, я переглянув статтю Connect. На жаль, схоже, оригінальний плакат покинув дискусію, і MS закрила проблему. Під час налаштування відтворення проблеми я розпочав тестування з новоствореними базами даних як в екземплярі 2008R2, так і в 2012 році. Обидві бази даних, як видається, функціонують нормально у всіх інших аспектах.
Glenn Estrada

3
З кроком повторного вирішення проблеми повідомте про це на Connect, щоб вони могли її виправити!
Джон Сейгель

Ви змінили рівень сумісності БД після оновлення? Я не використовую відстеження змін, але думаю про невідповідність версії після оновлення.
Гійом Р.

Відповіді:


3

Один не використовує min_valid_version для відстеження змін. Це використовується лише для перевірки, якщо ваш клієнт повинен бути реініціалізований, якщо метадані були очищені до того, як клієнт міг споживати зміни.

CHANGE_TRACKING_MIN_VALID_VERSION (Transact-SQL)

Отримує мінімальну версію, дійсну для використання при отриманні інформації відстеження змін із зазначеної таблиці під час використання CHANGETABLEфункції.

Min_valid_version змінюється у версії очищення та не залежить від змін у таблиці користувачів. Кожен раз, коли запускається потік очищення, може бути оновлення min_valid_version незалежно від змін даних.

До 2012 року min_valid_version був позначений так само, як версія очищення, адже насправді це має бути більше, ніж версія очищення, оскільки метадані для цієї версії вже очищені. У 2012 році це те, що вони змінили, щоб переконатися, що вони оновлюють правильну min_valid_version.

Не слід відстежувати зміни, використовуючи min_valid_version, натомість слід зберігати last_sync_version після кожної синхронізації та викликати, CHANGETABLEщоб перерахувати зміни після останньої версії синхронізації.

За дизайном - Мінімально допустима версія змінюється у версії очищення і не залежить від змін у таблиці користувачів. Щоразу при запуску потоку очищення може відбуватися оновлення до мінімально допустимої версії незалежно від змін даних.

Вирішити - Змініть процедуру, щоб використовувати "current_version" замість "min_valid_version"

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.