O Change Data Capture ou mais conhecido como CDC é um recurso disponível no SQL Server que armazena todas as alterações (INSERT, UPDATE, DELETE) realizadas em uma determinada tabela.
Por padrão as databases vem com o CDC desabilitado. Caso seja necessário o CDC deve ser ativado para cada database. Assim que o CDC é ativado é criado um schema chamado cdc e também são criadas alguns objetos e estruturas de controle dentro deste schema, como por exemplo:
- cdc.change_tables
- cdc.ddl_history
- cdc.index_columns
- cdc.lsn_time_mapping
Mesmo que você ative o CDC para uma database específica por padrão as tabelas vem com o CDC desativado, portanto é preciso ativá-lo para cada tabela necessária. Assim que o CDC é ativado para uma tabela específica é criada uma tabela com a mesma estrutura e 5 colunas adicionais no schema cdc:
- cdc.nomeSchema_nomeTabela
Também são criadas duas funções para extração dos dados:
- cdc.fn_cdc_get_all_changes_nomeSchema_nomeTabela
- cdc.fn_cdc_get_net_changes_nomeSchema_nomeTabela
A extração das alterações realizadas em uma determinada tabela é responsabilidade da instância de captura (capture instance). A origem de extração das alterações utilizada pela instância de captura é o arquivo do log de transação (transaction log) da database. A instância de captura é executada através de um job criado no SQL Server Agent:
- cdc.nomeDatabase_capture
Também é criado um outro job no SQL Server Agent, que é o job de limpeza (cleanup). Este job de limpeza é responsável pela limpeza das tabelas do CDC mantendo por padrão 4320 minutos (3 dias) de alterações dentro de cada tabela do CDC e removendo 5000 linhas a cada iteração.
- cdc_nomeDatabase_cleanup
A seguir podemos visualizar a arquitetura do Change Data Capture:
Referências: