Durante la risoluzione di un problema relativo alla sincronizzazione dei dispositivi disconnessi con un server di database centrale, riscontriamo un problema dopo l'aggiornamento a SQL Server 2012 sul server. Sembra che CHANGE_TRACKING_MIN_VALID_VERSION stia restituendo un valore 1 superiore a quello che dovrebbe (o almeno rispetto a prima dell'aggiornamento).
Ho lavorato attraverso la grande camminata di Arshad Ali attraverso l'esempio di come creare un semplice esempio.
Ho eseguito gli script dal n. 1 al n. 5 per inserire, eliminare e aggiornare una riga nella tabella Employee in un ambiente SQL Server 2008 e 2012.
Nel 2008, la seguente dichiarazione restituisce uno 0:
SELECT CHANGE_TRACKING_MIN_VALID_VERSION(OBJECT_ID('Employee'))
Nel 2012, restituisce un 1.
Lavorando con alcuni altri script (6-8) nei test, ho impostato il periodo di conservazione su 1 minuto per forzare, si spera, un'azione di pulizia. Sono partito per il giorno e apparentemente ha funzionato durante la notte.
Nell'istanza del 2008, CHANGE_TRACKING_CURRENT_VERSION e CHANGE_TRACKING_MIN_VALID_VERSION sono uguali (11). Nell'istanza del 2012, CHANGE_TRACKING_MIN_VALID_VERSION è uno superiore (12) rispetto a CHANGE_TRACKING_CURRENT_VERSION (11). Ciò potrebbe avere un impatto sul processo di sincronizzazione quando un database è inattivo per lunghi periodi di tempo. E abbiamo scoperto che il processo potrebbe rimanere bloccato in un ciclo, specialmente quando viene eseguito il seguente test per determinare se è necessaria una reinizializzazione, al contrario della sincronizzazione:
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''...
Qualcun altro ha sperimentato questo cambiamento nel comportamento? Qualcuno ha una spiegazione?