No primeiro post sobre CDC, mostramos a criação de um pacote do SQL Server Integration Services o qual faz a carga inicial dos dados. Neste post iremos consumir a leitura dos dados que foram alterados. Para quem não leu a primeira parte, segue o link: Parte 1 – Como Consumir os Dados do CDC pelo SSIS – CDB Data Solutions
Criando um pacote na solução existente
Vamos assumir que você leitor está acompanhando do primeiro post, assim continuaremos com a mesma solução. Seguindo aqui iremos começar com a criação do pacote Diferencial.dtsx.
Para criar o pacote Diferencial.dtsx devemos ir em Solution Explorer, com o botão direito em SSIS Packages e em New SSIS Packages e já aparecerá um novo pacote junto aos outros pacotes existentes.
Para deixarmos tudo organizado, altere o nome do novo pacote que esta como Package1.dtsx para Diferencial.dtsx.
Componentes do pacote Diferencial.
Os componentes serão os mesmos do pacote Inicial.dtsx. Incluam neste novo pacote dois CDC Control Task e um Data Flow Task organizando-os conforme a imagem abaixo.
Configurando os componentes
As mudanças nas configurações entre os dois pacotes são mínimas, se comparados ao Inicial.dtxs:
- CDC Control Operation: escolha a opção “Mark processed range”. Esta opção irá coletar os dados rastreados desde a última vez que os dados foram consumidos;
- Variable containing the CDC state: use a CDC_State que já foi criada na parte 1;
- Connection manager for the database Where the state is storage: neste exemplo, vamos utilizar a mesma conexão que criamos acima;
- Table to use for storing state: esta tabela foi criada na parte 1, a tabela será mostrada na lista, selecione ela;
- State name: na lista escolha o CDC_state;
No segundo CDC Control Task vamos colocar o nome de CDC Marca Fim e a configuração é igual ao do primeiro CDC Control Task.
DataFlow
No Dataflow vamos precisar de:
- 1 CDC Source;
- 1 CDC Splitter;
- 3 ADO Net Destination.
A função deste componente será a mesma do inicial.dtsx, receber os dados do CDC, separar as operações e gravar nas respectivas tabelas.
E está pronto o pacote Diferencial.dtsx.
Este pacote poderá ser agendado para executar com frequência. A frequência vai depender da estratégia da empresa, pode ser diário, semanal etc. Lembrando que quanto maior o tempo entre as execuções mais dados serão lidos e maior será o log do banco de origem para reter estes dados.
Este pacote vai ler a última posição registrada na tabela CDC_State, carregará estes dados para o Fluxo do SSIS e o CDC splitter fará a separação por tipo de transação e gravará nas tabelas apropriadas.
Ao final o último CDC control Task gravará da última posição lida por este processo, deixando pronto para a próxima carga.
É um recurso muito útil quando o banco de dados não tem campos específicos nas tabelas que indiquem quando o registro foi alterado.
Espero ter ajudado com esta série de artigos sobre o CDC.
Até o próximo post pessoal!😊