none
CHANGE_TRACKING RRS feed

  • Pergunta

  • Pessoal, me salvem por favor!

    Habilitei o CHANGE_TRACKING em uma base usando o comando:

    ALTER DATABASE [Meu db]
    SET CHANGE_TRACKING = ON (CHANGE_RETENTION = 1 DAYS, AUTO_CLEANUP = ON)

    Depois na tabela:

    ALTER TABLE [Minha table]
    ENABLE CHANGE_TRACKING WITH(TRACK_COLUMNS_UPDATED = ON)

    Com o comando abaixo consegui pegar as inserções que foram feitas no banco e a "Change_Version".

    DECLARE @SINC BIGINT
    SET @SINC = 0

    SELECT * FROM CHANGETABLE(CHANGES [Minha Table], @SINC) AS CT

    Porém, 2 informações importantíssimas para mim não estão vindo.. Preciso da SYS_CHANGED_COLUMNS e da SYS_CHANGE_OPERATIONS = U. A minha SYS_CHANGE_OPERATIONS  está vindo somente como I apesar de já ter executado vários UPDATES na tabela. O meu SYS_CHANGED_COLUMNS está vindo como NULL.

    Olhando a documentação da função CHANGETABLE, vi que a SYS_CHANGED_COLUMNS vem como nulo nas seguintes situações:

    • Column change tracking is not enabled.

    • The operation is an insert or delete operation.

    • All nonprimary key columns were updated in one operation. 

    Porém não acredito que esteja em nenhuma delas. Alguém pode me ajudar?

    Obrigado.




    terça-feira, 3 de julho de 2012 19:00

Respostas

  • Psycho,

    O que esta acontecendo é que o Change_Tracking esta fazendo um controle de versionamento de linhas de acordo com as operações em sequência, conforme destaca o Book On-Line:

    "Alterações de coluna de chave primária nunca são marcadas como atualizações. Se um valor de chave primária for alterado, será considerado como
    excluído do valor antigo e inserido no valor novo.

    Se você excluir uma linha e depois inserir uma linha que tenha a chave primária antiga, a alteração será vista como uma atualização em todas as
    colunas da linha.

    Os valores retornados para as colunas SYS_CHANGE_OPERATION e SYS_CHANGE_COLUMNS são relativos à versão básica especificada.

    Por exemplo, se uma operação de inserção tiver sido feita na versão 10 e uma operação de atualização, na versão 15, e se a linha de base da last_sync_version for 12, uma atualização será informada. Se o valor da last_sync_version for 8, uma inserção será informada. SYS_CHANGE_COLUMNS nunca informará colunas computadas como tendo sido atualizadas."


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    • Marcado como Resposta Psycho_Vetter terça-feira, 17 de julho de 2012 01:55
    terça-feira, 10 de julho de 2012 14:30

Todas as Respostas

  • Psycho,

    O que esta acontecendo é que o Change_Tracking esta fazendo um controle de versionamento de linhas de acordo com as operações em sequência, conforme destaca o Book On-Line:

    "Alterações de coluna de chave primária nunca são marcadas como atualizações. Se um valor de chave primária for alterado, será considerado como
    excluído do valor antigo e inserido no valor novo.

    Se você excluir uma linha e depois inserir uma linha que tenha a chave primária antiga, a alteração será vista como uma atualização em todas as
    colunas da linha.

    Os valores retornados para as colunas SYS_CHANGE_OPERATION e SYS_CHANGE_COLUMNS são relativos à versão básica especificada.

    Por exemplo, se uma operação de inserção tiver sido feita na versão 10 e uma operação de atualização, na versão 15, e se a linha de base da last_sync_version for 12, uma atualização será informada. Se o valor da last_sync_version for 8, uma inserção será informada. SYS_CHANGE_COLUMNS nunca informará colunas computadas como tendo sido atualizadas."


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    • Marcado como Resposta Psycho_Vetter terça-feira, 17 de julho de 2012 01:55
    terça-feira, 10 de julho de 2012 14:30
  • Muito Obrigado Professor.
    terça-feira, 17 de julho de 2012 01:54