Para que Serve e como Configurar o Change Data Capture (CDC)

No post de hoje vamos falar sobre o CDC (Change Data Capture), qual a sua finalidade, como funciona e como configurar.         

Incialmente devemos conceituar, o CDC é um recurso do SQL Server que, em geral, serve para rastreio de alterações dos registros de tabelas. Desta forma, quando for necessária uma integração diferencial dos dados, podemos filtrar exatamente quais os registros foram alterados, evitando desta forma a carga de todos os registros de uma tabela e reduzindo o consumo de recursos na leitura dos dados de origem.

Este recurso utiliza o Transaction Log do SQL Server para marcar as informações que foram modificadas ao longo do tempo. No caso da leitura do CDC, ela é feita neste log, reduzindo a incidência de locks.

O CDC é habilitado por banco de dados e por tabela, desta forma podemos escolher quais objetos de um banco de dados vamos rastrear. Após ter habilitado, a mudança significativa que teremos é uma tabela que guarda um Hash com alguns dados como o status do registro, último LSN, data e hora da última leitura.

Agora que entendemos como o CDC funciona, vamos a configuração passo a passo. Há várias formas de habilitar e configurar o CDC, porém neste artigo vamos mostrar somente por comandos TSQL.

Passo 1 – Habilitar o CDC no banco de dados escolhido para ter suas alterações rastreadas.

Antes de habilitar, vamos verificar a situação do CDC para o banco de dados. A query abaixo mostra o nome do banco e se o CDC está habilitado. Neste caso, a coluna is_cdc_enabled está retornando 0 (zero), o que indica que o CDC está desabilitado no banco de dados Cliente.

Para habilitar o CDC, temos a Procedure de sistema sp_cdc_enable_db que faz este processo para nós:

E se executarmos novamente a query que retorna o Status do CDC, vamos ver que agora está como 1, indicando que o CDC está habilitado.

Passo 2 – Habilitar o CDC na tabela que queremos rastrear as alterações.

Seguindo a mesma ideia do passo 1, primeiro vamos verificar o estado da tabela com a query abaixo:

Nesta query usamos a sys.tables e filtramos pelo nome da tabela para retornar somente os dados que precisamos.

E abaixo, podemos ver que o retorno do campo is_tracked_by_cdc está como 0, o que indica que as alterações desta tabela não estão sendo rastreadas.

E da mesma forma que habilitamos o CDC no banco de dados, temos a procedure sp_cdc_enable_table para habilitar o CDC na tabela, porém para esta procedure temos que informar 5 parâmetros, dos quais somente 3 são obrigatórios:

@source_schema = nome do schema da tabela que será rastreada

@source_name = nome da tabela que será rastreada

@role_name = usado para definir uma Role para gerenciar as permissões do CDC

Ao final da execução da Procedure, a sp_cdc_enable_table criou dois Jobs:

Cdc.Cliente_capture = responsável por capturar as alterações da tabela “dbo.Customers”

Cdc.Cliente_cleanup = responsável por expurgar os dados antigos referente ao CDC, como histórico das alterações, alguns Logs do CDC e etc.

Se executarmos novamente a consulta para verificar o estado do CDC na tabela, temos o seguinte resultado:

Pronto, o CDC no banco de dados Cliente na tabela Customers já está rastreando as alterações e gravando no tlog para quando o integrador precisar saber quais registros foram inseridos, alterados ou deletados.

Esperamos que este artigo tenha ajudado.

Para o próximo post, vamos fazer um projeto do Integration Service para consumir os dados do CDC.

Até a próxima pessoal! 😊

Generic selectors
Exact matches only
Search in title
Search in content
Post Type Selectors

Categorias

Categorias

Artigos Recentes

A Importância do Power BI na Tomada de Decisão: Um Novo Paradigma para as Empresas

Fale Conosco

Converse com nossos especialistas e descubra como transformar seus dados em informações seguras, disponíveis e acessíveis.

Endereço

Rua Angelo Antonello, 93 – Sala 62, Centro – Farroupilha/RS – CEP: 95170-492

Contato Comercial

Email: contato@cdbdatasolutions.com.br
Telefone: (54) 3401-1471

Abrir bate-papo
Olá
Podemos ajudar?