“O Change Data Capture foi projetado para capturar inserções, atualizações e excluções aplicadas em tabelas do SQL Server e disponibilizar os detalhes das mudanças disponíveis em um formato relacional facilmente consumível.
As tabelas de alterações usadas pelo Change Data Capture contêm colunas que refletem a estrutura de colunas de uma tabela de origem controlada, junto com os metadados necessários para entender as mudanças ocorridas.” (Microsoft Books Online)
O Change Data Capture ou CDC atua nas tabelas selecionadas de um banco de dados específico como uma trigger before que dispara as inserções e/ou alterações realizadas no objeto para o qual ela está apontada em uma outra tabela.
A grande diferença é que a trigger usa a mesma transação realizada na tabela original para espelhar essa alteração em uma outra tabela (trabalha de forma Síncrona), podendo causar uma série de problemas para o sistema transacional (entre eles block/lock, overhead dentre outros).
Neste ponto o Change Data Capture atua de maneira a não prejudicar o sistema transacional, realizando a captura das alterações da tabela através dos registros salvos dentro do arquivo de LOG do SQL Server após a transação original ser concluída (trabalha de maneira Assíncrona).
O CDC, conforme representado através da imagem que demonstra a arquitetura da feature, é geralmente utilizado para captura de dados históricos a serem usados para ambiente de Data Warehouse e/ou Operational Data Store (ODS).
Para conseguir exemplificar a sua utilização, imagine um sistema onde ocorrem várias alterações em um mesmo registro durante o dia, porém a carga de dados do DW e/ou ODS ocorre uma vez ao dia. O que ocorreria é que somente a ultima alteração desse registro seria levada para o Sistema histórico.
O CDC atuaria, nesse caso, como um armazém de dados voláteis e momentâneos transacional utilizado para carga do armazém de dados não voláteis dimensional.
Antes de iniciarmos os testes com o Change Data Capture, será necessário que criemos o ambiente de teste.
Como base de dados relacional, usaremos dentro do SQL Server 2014 o banco de dados AdventureWorks2014.
Como stage de dados (passo anterior à carga de um ODS ou DW) usaremos uma base de dados que deverá ser construída com o script abaixo:
-- ========================================= -- ------ Create Stage Enviromment --------- -- ========================================= USE master GO CREATE DATABASE AdventureWorks_Stage GO USE AdventureWorks_Stage GO CREATE TABLE [dbo].[Person]( [BusinessEntityID] INT NOT NULL, [PersonType] NCHAR(2) NOT NULL, [NameStyle] BIT NOT NULL CONSTRAINT [DF_Person_NameStyle] DEFAULT ((0)), [Title] NVARCHAR(8) NULL, [FirstName] NVARCHAR (50) NOT NULL, [MiddleName] NVARCHAR (50) NULL, [LastName] NVARCHAR (50) NOT NULL, [Suffix] NVARCHAR (10) NULL, [EmailPromotion] INT NOT NULL CONSTRAINT [DF_Person_EmailPromotion] DEFAULT ((0)), [rowguid] UNIQUEIDENTIFIER ROWGUIDCOL NOT NULL CONSTRAINT [DF_Person_rowguid] DEFAULT (newid()), [ModifiedDate] DATETIME NOT NULL CONSTRAINT [DF_Person_ModifiedDate] DEFAULT (getdate()), [ModifiedType] CHAR(1) NOT NULL ) ON [PRIMARY] GO
No próximo post da série você aprenderá a criar, habilitar e/ou verificar sua existência em tabelas localizadas dentro de uma base de dados específica.
Muito bem definido. Simples e eficiente!
Espero que os próximos venham rápido!
CurtirCurtir
Muito obrigado pelo feedback, Gil. Em breve vem os demais posts. Espero poder ajudar. Grande abraço!
CurtirCurtir