Ao solucionar um problema de sincronização de dispositivos desconectados com um servidor de banco de dados central, estamos enfrentando um problema após a atualização para o SQL Server 2012 no servidor. Parece que o CHANGE_TRACKING_MIN_VALID_VERSION está retornando um valor 1 maior do que deveria (ou pelo menos do que antes da atualização).
Eu tenho trabalhado através da grande caminhada de Arshad Ali através do exemplo de como configurar um exemplo simples.
Executei os scripts de 1 a 5 para inserir, excluir e atualizar uma linha na tabela Employee nos ambientes SQL Server 2008 e 2012.
Em 2008, a seguinte declaração retorna um 0:
SELECT CHANGE_TRACKING_MIN_VALID_VERSION(OBJECT_ID('Employee'))
Em 2012, ele retorna 1.
Ao trabalhar com mais alguns scripts (6-8) nos testes, defino o período de retenção para 1 minuto, para forçar uma ação de limpeza. Eu saí para o dia e, aparentemente, correu durante a noite.
Na instância de 2008, CHANGE_TRACKING_CURRENT_VERSION e CHANGE_TRACKING_MIN_VALID_VERSION são iguais (11). Na instância de 2012, o CHANGE_TRACKING_MIN_VALID_VERSION é um mais alto (12) que o CHANGE_TRACKING_CURRENT_VERSION (11). Isso pode ter um impacto no processo de sincronização quando um banco de dados fica ocioso por longos períodos de tempo. E descobrimos que o processo pode ficar preso em um loop, especialmente quando o teste a seguir é executado para determinar se uma reinicialização, em oposição à sincronização, é necessária:
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''...
Alguém mais experimentou essa mudança de comportamento? Alguém tem uma explicação?