Lors du dépannage d'un problème de synchronisation des appareils déconnectés avec un serveur de base de données central, nous rencontrons un problème après la mise à niveau vers SQL Server 2012 sur le serveur. Il semble que CHANGE_TRACKING_MIN_VALID_VERSION renvoie une valeur 1 supérieure à ce qu'elle devrait (ou au moins à ce qu'elle faisait avant la mise à niveau.)
J'ai travaillé à travers la grande marche d'Arshad Ali à travers l'exemple de la façon de mettre en place un exemple simple.
J'ai exécuté les scripts de # 1 à # 5 pour insérer, supprimer et mettre à jour une ligne dans la table Employee dans un environnement SQL Server 2008 et 2012.
En 2008, l'instruction suivante renvoie un 0:
SELECT CHANGE_TRACKING_MIN_VALID_VERSION(OBJECT_ID('Employee'))
En 2012, il renvoie un 1.
En travaillant avec quelques autres scripts (6-8) dans les tests, j'ai défini la période de rétention sur 1 minute pour forcer, espérons-le, une action de nettoyage. Je suis parti pour la journée et apparemment ça a fonctionné toute la nuit.
Dans l'instance de 2008, CHANGE_TRACKING_CURRENT_VERSION et CHANGE_TRACKING_MIN_VALID_VERSION sont égaux (11). Dans l'instance 2012, le CHANGE_TRACKING_MIN_VALID_VERSION est un supérieur (12) que le CHANGE_TRACKING_CURRENT_VERSION (11). Cela peut avoir un impact sur le processus de synchronisation lorsqu'une base de données est inactive pendant de longues périodes. Et nous avons constaté que le processus pouvait se coincer dans une boucle, en particulier lorsque le test suivant est effectué pour déterminer si une réinitialisation, par opposition à la synchronisation, est nécessaire:
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''...
Quelqu'un d'autre a-t-il connu ce changement de comportement? Est-ce que quelqu'un a une explication?