Então, começamos a explorar o uso da captura de dados alterados em um de nossos bancos de dados de produção. Gostaríamos de saber a data e hora de cada alteração. Lendo orientações e tutoriais, etc., parece que a abordagem padrão é usar o LSN para se relacionar com a cdc.lsn_time_mapping
tabela do sistema. Essa abordagem funciona, mas não é muito direta nem eficaz quando se fala de centenas de milhares de alterações por dia.
Em um ambiente de teste, fiz o seguinte ajuste nas tabelas de alterações. Emiti uma ALTER TABLE
declaração para adicionar uma coluna ao final chamada [__ChangeDateTime]
e fiz seu valor padrão GetDate()
. A abordagem parece funcionar, o controle de alterações ainda funciona normalmente, os datetime estão sendo capturados. Mas mexer nas mesas do sistema me deixa um pouco nervoso.
Se esse não é um campo do sistema que a Microsoft adicionou desde o início, eles devem ter seus motivos. Como eles optaram pelo LSN para a abordagem cdc.lsn_time_mapping, eu estou me preparando para problemas criando meu próprio hack dessa maneira?
ATUALIZAR:
Descoberto durante o teste que GetDate () às vezes não é preciso o suficiente para nossas necessidades - várias alterações compartilhando ao mesmo tempo. Recomenda o uso de sysdatetime () e datetime2 para mover o valor para o nanossegundo. Opção para 2008+ apenas obviamente.
A única ressalva que eu daria é que essas tabelas são descartadas automaticamente quando o CDC está desativado. A coluna não pode ser recriada automaticamente quando você a renova
fonte