En problemas para solucionar un problema con la sincronización de dispositivos desconectados con un servidor de base de datos central, estamos experimentando un problema después de actualizar a SQL Server 2012 en el servidor. Parece que CHANGE_TRACKING_MIN_VALID_VERSION está devolviendo un valor 1 más alto de lo que debería (o al menos de lo que lo hizo antes de la actualización).
He estado trabajando a través del gran paseo de Arshad Ali a través de ejemplos de cómo configurar un ejemplo simple.
He ejecutado los scripts del # 1 al # 5 para insertar, eliminar y actualizar una fila en la tabla de empleados en un entorno SQL Server 2008 y 2012.
En 2008, la siguiente declaración devuelve un 0:
SELECT CHANGE_TRACKING_MIN_VALID_VERSION(OBJECT_ID('Employee'))
En 2012, devuelve un 1.
Al trabajar con algunos scripts más (6-8) en las pruebas, configuré el período de retención en 1 minuto para poder forzar una acción de limpieza. Me fui por el día y aparentemente funcionó durante la noche.
En la instancia de 2008, CHANGE_TRACKING_CURRENT_VERSION y CHANGE_TRACKING_MIN_VALID_VERSION son iguales (11). En la instancia de 2012, CHANGE_TRACKING_MIN_VALID_VERSION es uno más alto (12) que CHANGE_TRACKING_CURRENT_VERSION (11). Esto podría tener un impacto en el proceso de sincronización cuando una base de datos está inactiva durante largos períodos de tiempo. Y hemos descubierto que el proceso podría quedar atrapado en un bucle, especialmente cuando se realiza la siguiente prueba para determinar si se requiere una reinicialización, a diferencia de la sincronización:
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''...
¿Alguien más ha experimentado este cambio de comportamiento? ¿Alguien tiene una explicación?