Atenção: esse artigo tem um vídeo complementar. Clique e assista!
Neste artigo conheceremos as formas de captura de dados existente no SQL Server 2008, através do Change Data Capture. Em seguida, demonstraremos como realizar a captura destes dados, com base em uma tabela contendo dados fictícios.
Para que serve:
Através do Change Data Capture, torna-se possível a criação de um repositório ou histórico de dados, oferecendo a sua organização criar e manter uma base de conhecimento. Esta base de conhecimento deverá ajudar a estabelecer o nível de importância sobre as informações manipuladas diariamente, fazendo com que os Diretores, Gerentes e Administradores avaliem o quanto esta informação é importante e como ela poderá ajudar na tomada de decisão a curto ou médio prazo.
Em que situação o tema útil:
A captura de dados é uma técnica útil para ambientes que apresentam processamento diário de informações. Através dos trabalhos de captura de dados, podemos criar uma organização sobre os dados manipulados, estabelecendo regras de controle e auditoria. Utilizando os recursos existentes no Change Data Capture, torna-se possível automatizar ainda mais as formas de coleta e categorização de informações.
Com o passar do tempo, o volume de informações armazenadas em uma tabela pode crescer de forma considerável, tornando-se um grande repositório. Este crescimento é provocado pela manipulação de dados, mais precisamente por inserções e atualizações que ocorrem constantemente em uma tabela.
Com o objetivo de analisar, identificar e documentar todas as ações que ocorrem em um banco de dados e suas tabelas, o SQL Server 2008 apresenta uma nova funcionalidade, chamada Change Data Capture ou Captura de dados de alterações.
Neste artigo apresentaremos esta nova funcionalidade, fornecida a partir das versões Enterprise, Developer e Evaluation.
Entendendo o Change Data Capture
O Change Data Capture é considerado uma das maiores inovações adicionadas ao SQL Server. Através desta funcionalidade torna-se possível realizar dois processos: o primeiro é chamado de captura dos dados alterados em tempo real e o segundo é denominado rastreamento de dados alterados.
O processo de captura de dados baseia-se na utilização dos comandos de manipulação de dados (INSERT, UPDATE e DELETE), mais conhecidos como comandos DML (Data Manipulation Language). Este processo utiliza um mecanismo de identificação e captura de dados chamado instância de captura de dados de alteração, conforme veremos nos próximos tópicos.
Esta instância possui a finalidade de observar a execução dos comandos DML e, conforme estes comandos são processados, a instância se encarrega de gerar uma cópia para ser posteriormente armazenada em tabelas utilizadas pelo Change Data Capture.
O processo de rastreamento de dados alterados tem como finalidade pesquisar e informar quais os dados já foram alterados. Através de funções e stored procedures o SQL Server consegue obter estas informações.
Com a utilização do Change Data Capture, o SQL Server cria um ambiente único para a realização destes dois processos, evitando a utilização de demais recursos ou técnicas complementares. Este ambiente é composto por diversos componentes específicos, como veremos aqui.
O funcionamento do Change Data Capture
O funcionamento do Change Data Capture pode ser considerado simples, tendo como base a execução de comandos DML. Mas existe outro elemento muito importante que disponibiliza as informações sobre os dados alterados. Este elemento é o Log de Transações ou Transaction Log, existente em qualquer banco de dados, responsável por armazenar informações sobre todos os procedimentos realizados.
A partir do log, o Change Data Capture identifica quais dados foram alterados, repassando estas informações para o processo de captura. Este, por sua vez, repassa este mesmo dado para as tabelas utilizadas para o armazenamento de dados alterados, ou seja, uma cópia do dado é armazenada em tabelas.
Essa sequência de atividades é conhecida como Fluxo de Dados Processados, como pode ser visto na Figura 1.
Figura 1. Fluxo de dados realizado durante o processo de captura de dados
Conforme os dados são inseridos de forma incremental em outras tabelas ou fontes de dados externas (data mart ou data warehouse), o Change Data Capture consegue capturar o volume de informações que está sendo manipulada a partir do log de transações.
Se considerarmos que este processo de captura poderá ser realizado constantemente em nosso ambiente durante um período de tempo, podemos criar alguns indicadores de informação que nos permitem dimensionar:
· Quantidade de linhas de registros processadas;
· Quantidade de inserções realizadas;
· Quantidade de atualizações realizadas;
· Volume ou tamanho de dados processados, etc.
Estes indicadores podem ser informações importantes para um administrador de banco de dados tomar diversas decisões relacionadas ao processamento e consumo de recursos realizadas sobre um banco de dados ou tabela.
O processo de captura se encerra a partir do momento que as funções de consulta de dados utilizadas pelo Change Data Capture são desabilitadas. Através do trabalho realizado pela instância de captura, torna-se possível catalogar e retornar informações sobre os dados alterados. Estas funções são conhecidas como CDC functions.
Além disso, o processo de captura de dados também pode ser aplicado em conjunto com ferramentas e tecnologias ETL durante o processo de inserção de dados em tabelas ou fontes de dados externas, como data warehouse ou data marts.
Os recursos utilizados pelo Change Data Capture
Para realizar os processos de captura e rastreamento de dados alterados o SQL Server utiliza alguns recursos para trabalhar com o Change Data Capture. Organizados de acordo com sua funcionalidade, são eles:
· Tabela de Alteração;
· Instância de Captura de dados;
· Tabela de Origem;
· Change Data Capture Agent.
Tabela de Alteração
A tabela de alteração é associada a uma tabela que está sendo utilizada pelo Change Data Capture. Ela apresenta em sua estrutura algumas particularidades para possibilitar o controle do fluxo de dados ocorrido sobre determinada tabela. Dentre estas particularidades destacamos as cinco primeiras colunas de metadados, onde cada coluna fornece informações adicionais pertinentes às alterações registradas.
As colunas restantes espelham as colunas capturadas sobre a tabela de origem, respeitando o nome e tipo de dados de cada coluna. Cada operação de inserção ou exclusão que é aplicada a uma tabela de origem aparece como uma única linha dentro da tabela de alteração.
As colunas de dados da linha que são o resultado de uma operação de inserção contêm os valores de coluna depois da inserção. As colunas de dados da linha que são o resultado de uma operação de exclusão contêm valores de coluna antes da exclusão. Uma operação de atualização requer uma entrada de linha para identificar os valores da coluna antes da atualização e uma segunda entrada para identificar os valores da coluna depois da atualização.
Cada linha em uma tabela de alteração também contém metadados adicionais para permitir a interpretação da atividade de alteração.
· A coluna __$start_lsn identifica o número da seqüência do log de confirmação (LSN) que foi atribuído à alteração. O LSN de confirmação não só identifica alterações que foram confirmadas dentro da mesma transação, mas também ordena essas transações;
· A coluna __$seqval pode ser usada para ordenar mais alterações que acontecem na mesma transação, por exemplo, uma sequência de registros que estão sendo inseridos em uma tabela. Através desta coluna podemos encontrar o número sequencial de inserções realizadas;
...