Bei der Fehlerbehebung bei einem Problem mit der Synchronisierung nicht verbundener Geräte mit einem zentralen Datenbankserver tritt nach dem Upgrade auf SQL Server 2012 auf dem Server ein Problem auf. Es scheint, dass CHANGE_TRACKING_MIN_VALID_VERSION einen Wert 1 zurückgibt, der höher ist als er sollte (oder zumindest als vor dem Upgrade).
Ich habe Arshad Alis großartigen Spaziergang durch ein Beispiel für die Erstellung eines einfachen Beispiels durchgearbeitet .
Ich habe die Skripte von Nr. 1 bis Nr. 5 ausgeführt, um eine Zeile in der Employee-Tabelle sowohl in einer SQL Server 2008- als auch in einer 2012-Umgebung einzufügen, zu löschen und zu aktualisieren.
Im Jahr 2008 gibt die folgende Anweisung eine 0 zurück:
SELECT CHANGE_TRACKING_MIN_VALID_VERSION(OBJECT_ID('Employee'))
Im Jahr 2012 gibt es eine 1 zurück.
Beim Durcharbeiten einiger weiterer Skripte (6-8) in den Tests habe ich die Aufbewahrungsdauer auf 1 Minute festgelegt, um hoffentlich eine Bereinigungsaktion zu erzwingen. Ich ging für den Tag und anscheinend lief es über Nacht.
In der Instanz von 2008 sind CHANGE_TRACKING_CURRENT_VERSION und CHANGE_TRACKING_MIN_VALID_VERSION gleich (11). In der 2012-Instanz ist CHANGE_TRACKING_MIN_VALID_VERSION um eins höher (12) als CHANGE_TRACKING_CURRENT_VERSION (11). Dies kann sich auf den Synchronisierungsprozess auswirken, wenn eine Datenbank längere Zeit inaktiv ist. Und wir haben festgestellt, dass der Prozess in eine Schleife geraten kann, insbesondere wenn der folgende Test durchgeführt wird, um festzustellen, ob eine Neuinitialisierung im Gegensatz zur Synchronisierung erforderlich ist:
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''...
Hat jemand diese Verhaltensänderung erlebt? Hat jemand eine Erklärung?