CORREÇÃO: a limpeza de controle de alterações não funciona quando a limpeza inválida e a versão de limpeza otimizada são negativas no SQL Server 2017

Aplica-se a: SQL Server 2017 on Windows

Sintomas


Suponha que você habilite o controle de alterações para uma ou mais tabelas no SQL Server 2017 e defina AUTO_CLEANUP = ativado. Você percebe que nenhuma linha é excluída ou limpada em tabelas do lado ou na tabela do sistema sys. syscommittab mesmo após operíodo de retenção. Além disso, você observa os seguintes sintomas:
  1. Se você se conectar usando uma conexão de administrador dedicada e consulta a limpeza inválida e a versão de limpeza otimizada, elas serão negativas: 
    Selecione * de sys. sysobjvalues onde valclass = 7 e objID = 1003--inválido 
    Selecione * de sys. sysobjvalues onde valclass = 7 e objID = 1004--Fortalecited
  2. Se você executar o SP a seguir para limpar o sys. syscommittab manualmente, ele não fará a limpeza e retornará a versão de limpeza de proteção avançada como negativo: 
    sp_flush_commit_table_on_demand exec
    Saída
    O valor retornado por change_tracking_hardened_cleanup_version () é-nnnnnn.
  3. Se você coletar sessão de evento estendido com change_tracking_cleanup de evento durante a limpeza automática do controle de alterações, você notará que o CleanupStatusChange está definido como 32 (erro) e o trabalho de limpeza existe:
    Capture.PNG

Status


A Microsoft confirmou que este é um problema nos produtos Microsoft listados na seção "Aplicável a".

Resolução


Esse problema foi corrigido na seguinte atualização cumulativa do SQL Server:
Sobre atualizações cumulativas do SQL Server:
Cada nova atualização cumulativa do SQL Server contém todos os hotfixes e todas as correções de segurança incluídas na atualização cumulativa anterior. Confira as atualizações cumulativas mais recentes do SQL Server:
Observação Para resolver esse problema, você precisa habilitar o sinalizador de rastreamento 8290 e permitir que o processo de limpeza automática seja executado. Depois que esse sinalizador de rastreamento estiver habilitado, o processo de limpeza de controle de alterações redefinirá a versão de limpeza inválida para limpar a versão com base no período de retenção. Esse sinalizador de rastreamento pode ser habilitado no nível da sessão ou no nível de inicialização. Paraentender a causa raiz do motivo pelo qual a versão de limpeza se tornou negativa, é recomendável que você chame o suporte e forneça mais detalhes.

Referências


Saiba mais sobre a terminologia que a Microsoft usa para descrever atualizações de software.