O Change Data Capture do SQL Server é um recurso que lê dados históricos dos logs de transações do SQL Server e os armazena em uma tabela especial.
Com o uso de funções especiais de valor de tabela (TVF), ele permite que o usuário consulte esses dados, possibilitando obter todas as alterações em uma tabela específica ou apenas as alterações líquidas resultantes das alterações em um período específico.
CDC tem certas vantagens
- Ele pode ser configurado para rastrear apenas determinadas tabelas ou colunas.
- É capaz de lidar com alterações de modelo até um certo grau.
- Ele não afeta o desempenho tanto quanto os gatilhos, porque trabalha com os logs de transações.
- É facilmente ativado / desativado e não requer colunas adicionais na tabela que devem ser rastreadas.
Também tem algumas desvantagens:
- A quantidade de dados do histórico pode se tornar enorme rapidamente.
- Você não pode rastrear quem fez as alterações (pelo menos não para exclusões).
- Os dados do histórico levam algum tempo para serem atualizados, porque são baseados nos logs de transações.
- Depende do SQL Server Agent. Se o agente não estiver em execução ou travar, nenhum histórico será rastreado.
Eu li bastante sobre o CDC e, embora agora saiba como usá-lo, ainda não tenho certeza se é a ferramenta certa para mim.
- Para quais tarefas / cenários o CDC é a ferramenta certa? (por exemplo, permitir que os usuários restaurem um objeto de dados em um determinado momento? Auditoria? Mostrando o histórico completo dos dados?)
- Quando você prefere não usar o CDC, mas recorrer a uma solução personalizada baseada em acionador?
- É bom usar o CDC em um banco de dados operacional e usar os dados do CDC em um aplicativo operacional? (por exemplo, mostrá-lo ao usuário final) Ou isso é claramente um mau uso desse recurso?
Normalmente, ouço dizer que o CDC é uma ferramenta de auditoria, mas não é para isso que serve a Auditoria do SQL Server ? Ambas são ferramentas diferentes para a mesma tarefa? Ou o CDC pode ser usado para outras coisas?
Meu cenário atual é que me pedem para criar uma estrutura de dados confiável, que supostamente seja a base para vários aplicativos futuros. Os requisitos exatos são embaçados, mas um é que ele deve ser capaz de rastrear o histórico de dados e restaurar entradas mais antigas, juntamente com todos os dados relacionados de outras tabelas. Estou avaliando o CDC agora como uma opção, mas não tenho certeza se esse é o caminho a seguir, porque não consigo encontrar nenhum caso de uso recomendado.
Embora eu aprecie conselhos para o meu cenário específico, as respostas devem fornecer conselhos gerais sobre quando ou quando não usar o Change Data Capture.
fonte
Respostas:
Primeiramente,
Portanto, você pode decidir se algum de seus clientes não terá as edições corporativas ou se ainda não sabe que estará usando as edições corporativas. (Como a especificação inclui "vários aplicativos futuros", isso pode ser um problema real para você)
Ao contrário dos gatilhos, não é em tempo real, isso é uma vantagem e uma desvantagem. O uso de gatilhos sempre atrasa uma atualização.
Trabalhei em um sistema quando usamos gatilhos (gerados pelo CodeSmith), além de rastrear todas as alterações nos registros, também vinculamos as alterações a uma tabela "histórico" que incluía o módulo do aplicativo que fez a alteração, e o item da interface do usuário que o usuário usou para fazer a alteração.
No entanto, você pode resolver isso melhor no nível do aplicativo, digitando todas as atualizações em uma fila de mensagens que são reproduzidas para criar um banco de dados a qualquer momento, consulte Padrões Temporais no blog Martin Flowler para obter uma boa visão geral das opções.
fonte
Aqui está uma série de 9 partes muito bem escrita que analisa as diferentes maneiras de auditar as alterações de dados do SQL Server. As partes 3, 4 e 5 concentram-se no CDC. Vale a pena ler todos os artigos, pois isso responderá às suas perguntas, como os diferentes cenários em que os recursos seriam adequados e gerais. http://solutioncenter.apexsql.com/tag/methods-for-auditing-sql-server
fonte
Talvez depende.
Sim.
Sim.
Quando os dados na tabela de alterações não atendem às suas necessidades.
Sim.
Não, não é um mau uso desse recurso.
Sim.
Não.
O CDC pode ser usado para outras coisas.
Há controle de alterações e há captura de dados de alterações. Ambos têm suas raízes na replicação.
O Rastreamento de alterações fornece uma maneira de fornecer as alterações líquidas em uma tabela. Um exemplo de uso seria uma sincronização de dispositivo portátil.
O CDC, por outro lado, acompanha todas as pequenas mudanças, uma história. Pode-se usar esse histórico para atualizar um armazém de dados em vez de copiar em massa dados, ou pode-se usar esse histórico como dados em si e gerar relatórios a partir dele. A tabela de alterações não está oculta nem possui um esquema estranho ou algo assim. Você pode consultá-lo e usar os dados da maneira que desejar. Apenas tenha em mente ... não é em tempo real, como Ian disse. Os dados são provenientes do log de transações, portanto, cuide dele como se estivesse usando replicação, espelhamento ou envio de log. Em geral, será mais rápido que os gatilhos. Você precisará usar o isolamento de instantâneo, que tem sobrecarga, e precisará pensar na recuperação de falhas.
fonte
Um ponto de correção. Ao mesmo tempo, a captura de dados alterados estava disponível apenas nas versões listadas acima. No entanto, a captura de dados alterados ficou disponível na edição padrão a partir do 2016 SP1. Assim, muitos artigos escritos antes de 2016 SP1 fazem parecer que o CDC está fora de alcance para aqueles que usam a edição Standard. Este não é mais o caso. O documento da Microsoft que descreve o CDC disponível está no link abaixo.
https://docs.microsoft.com/en-us/sql/sql-server/editions-and-components-of-sql-server-2016?view=sql-server-2017#DW
fonte