quarta-feira, 12 de novembro de 2008

SQL Server 2008 SSIS – Change Data Capture (CDC) Parte 2

CDC e Integration Service (SSIS)
No ultimo post escrevi sobre uma nova funcionalidade do SQL Server 2008 chamada Change Data Capture (CDC), onde é criada uma infra-instrutora para registrar as alterações que ocorrem em uma tabela, ficando simples identificar as alterações nos dados durante a carga com o Integration Service (SSIS).

Para maiores detalhes veja a primeira parte em http://sqlserver-brasil.blogspot.com/2008/11/sql-server-2008-ssis-change-data.html.

Neste post vamos ver como utilizar o CDC dentro do SSIS, identificando facilmente as alterações nos dados durante a carga.

No post anterior mostrei o conteúdo da tabela cdc.dbo_Cliente_CT que contém o registro das operações que ocorreram na tabela Cliente, veja na imagem abaixo:

Select * from cdc.dbo_Cliente_CT


As linhas identificadas no resultado acima representam:
Azul INSERT (_$operation = 2)
Vermelho UPDATE antes da alteração (_$operation = 3)
Vermelho UPDATE após a alteração (_$operation = 4)
Verde DELETE (_$operation = 1)

O primeiro problema que temos é identificar as alterações que ocorreram em um determinado período (entre duas cargas de dados), porque na tabela acima não existe uma coluna com data e hora! A chave para resolver este problema está na coluna _$start_lsn, que contém uma numeração em Hexa seqüencial (LSN – Log Sequence Number). A função fn_cdc_map_time_to_lsn converte uma data e hora no LSN mais próximo! O script abaixo identifica o intervalo de LSN a ser utilizado na consulta na tabela acima:

DECLARE @Data_INI datetime, @Data_FIM datetime,
@lsn_INI binary(10), @lsn_FIM binary(10);

SET @Data_INI = GETDATE() -1
SET @Data_FIM = GETDATE();

SET @lsn_INI = sys.fn_cdc_map_time_to_lsn
('smallest greater than or equal', @Data_INI);

SET @lsn_FIM = sys.fn_cdc_map_time_to_lsn
('largest less than or equal', @Data_FIM);

O próximo problema é identificar as operações que devem ser realizadas durante a carga, utilizando as entradas na tabela cdc.dbo_Cliente_CT, dentro do período especificado acima. No exemplo da figura acima temos seis linhas, onde as três primeiras são inclusões, a quarta e quinta uma atualização e a última exclusão.

1) A cliente Maria foi incluída e depois não sofreu alteração, por isso esta deverá ser inserida no destino.

2) O cliente Jose foi incluído e depois alterado, sendo assim este cliente deverá ser inserido no destino com o telefone 2211-1111, que foi modificado na alteração registrada nas linhas quatro e cinco.

3) O cliente Antonio foi incluído e depois excluído (linhas 3 e 6 respectivamente), por isso este não deve fazer parte da carga.

Para facilitar o SQL Server 2008 disponibiliza a função cdc.fn_cdc_get_net_changes_dbo_cliente (em azul a porção variável do nome) que realiza a análise acima em um intervalo de LSN e retorna apenas as operações que devem ser feitas no destino. No exemplo acima o retorno da função seria: inclusão da Maria e Jose com o telefone novo! Na Stored Procedure abaixo temos o procedimento completo, ficando fácil utilizar este recurso no Integration Service:

CREATE PROC dbo.cdc_Cliente
@Data_INI datetime, @Data_FIM datetime
as
SET @Data_INI = GETDATE() -1
SET @Data_FIM = GETDATE();
DECLARE @lsn_INI binary(10), @lsn_FIM binary(10);

SET @lsn_INI = sys.fn_cdc_map_time_to_lsn
('smallest greater than or equal', @Data_INI);

SET @lsn_FIM = sys.fn_cdc_map_time_to_lsn
('largest less than or equal', @Data_FIM);

SELECT *
FROM cdc.fn_cdc_get_net_changes_dbo_cliente
(@lsn_INI, @lsn_FIM, 'all');
go

No próximo post veremos um exemplo de pacote SSIS utilizando os recursos deste post, até lá.
Landry.

domingo, 9 de novembro de 2008

Palestras SQL Server Landry

Olá,

Segue abaixo as minhas palestras para download (PPTs e Demonstrações):

- SQL Server 2005

Atualizando para Microsoft SQL Server 2005
Local: Instituto Infnet (Rio de Janeiro)
Data: 04/06/2007
Link: http://www.4shared.com/file/70459690/a009ce7b/SQL2005_Upgrade.html


Microsoft SQL Express 2005
Local: Intituto Infnet (Rio de Janeiro)

Data: 06/06/2007
Link: http://www.4shared.com/file/70460708/447aa26d/SQL2005_Express.html


- SQL Server 2008

Novidades no Integration Service (SSIS) do SQL Server 2008
Local: Allen
Data: 08/11/2008
Link: http://www.4shared.com/file/70458232/b5d8864/SQL2008_NovidadesSSIS.html


Espero que gostem!
Landry

quinta-feira, 6 de novembro de 2008

SQL Server 2008 SSIS – Change Data Capture (CDC) Parte 1

SQL Server 2008 SSIS – Change Data Capture (CDC) Parte 1

Estou no final da elaboração da minha palestra no SQL Server 2008 Community Lauch aqui no Rio de Janeiro, faltam apenas dois assuntos CDC e Script... Neste post vou escrever sobre o Change Data Capture (CDC).

O CDC tem como objetivo registrar todas as alterações que ocorrem em uma tabela facilitando o processo de exportação. Primeiro vamos aprender a habilitar e configurar esta funcionalidade, depois como fazer uso deste log no SSIS.

Habilitando e Configurando o CDC
Vamos criar um banco de dados para utilizar neste post como exemplo, execute o script abaixo:
USE master
go
IF EXISTS (SELECT name FROM sys.databases WHERE name = 'TesteCDC')
DROP DATABASE TesteCDC
go
CREATE DATABASE TesteCDC
go

Para habilitar o CDC no banco criado acima utilizamos a Stored Procedure sp_cdc_enable_db:
USE TesteDCD
go
EXEC sys.sp_cdc_enable_db

Podemos verificar se um banco de dados está habilitado para o CDC com a query abaixo:
SELECT [name] as Banco, is_cdc_enabled FROM sys.databases

O SQL Server 2008 cria alguns objetos quando um banco é habilitado para o CDC:
- Usuário: cdc
- Schema: cdc
- Tabelas de Sistema: capture_columns, change_tables, ddl_history, índex_columns, lsn_time_mapping e dbo.systranschemas.

Agora vamos criar uma tabela para ver o CDC em ação, execute o script abaixo:
USE TesteCDC
go
CREATE TABLE Cliente (
ClienteID int not null primary key,
Nome varchar(30) not null,
Telefone varchar(30) null)
go

Para habilitar o CDC na tabela criada acima basta utilizar a Stored Procedure sp_cdc_enable_table, veja o exemplo abaixo:
EXEC sp_cdc_enable_table 'dbo', 'Cliente',
@role_name = NULL, @supports_net_changes =1

A Stored Procedure pc_cdc_enable_table cria alguns objetos no SQL Server 2008: uma tabela de sistema (cdc.dbo_Cliente_CT) e dois Jobs do SQL Server Agent (cdc.TesteCDC_capture, cdc.TesteCDC_cleanup).

Para obter a lista de tabelas habilitadas para CDC execute a consulta abaixo:
Select [name], is_tracked_by_cdc from sys.tables

Agora vamos testar incluindo, excluindo e alterando linhas na tabela Cliente:
-- Insert
insert dbo.Cliente values (1,'Jose','2236-1111')
insert dbo.Cliente values (2,'Maria','2236-2222')
insert dbo.Cliente values (3,'Antonio','2236-3333')
go

-- Update
update dbo.Cliente set Telefone = '2211-1111'
where ClienteID = 1
go

-- Delete
delete dbo.Cliente where ClienteID = 3
go

Na figura abaixo temos o resultado da consulta ao log de operações gerado na tabela cdc.dbo_Cliente_CT:
Select * from cdc.dbo_Cliente_CT




As linhas identificadas no resultado acima representam:
Azul - INSERT (_$operation = 2)
Vermelho - UPDATE antes da alteração (_$operation = 3)
Vermelho - UPDATE após a alteração (_$operation = 4)
Verde - DELETE (_$operation = 1)

No próximo post vamos ver como utilizar este recurso no SSIS, até lá!
Landry.

segunda-feira, 3 de novembro de 2008

SQL Server 2008 SSIS – Data Profile

O SQL Server 2008 trás uma nova tarefa no Control Flow para analisar os dados durante a carga. O Data Profile pode fazer até 8 análises nos dados gerando um relatório em XML, que pode ser visualizado em um novo aplicativo chamado Data Profile Viewer.

As 8 análises disponibilizadas pelo Data Profile podem ser divididas em dois grupos: analise do relacionamento entre colunas e analise individua de colunas.

Análise do relacionamento entre colunas:
Candidate Key
– analisa se uma ou mais colunas podem ser utilizadas como chave, ou analisa se existem valores duplicados onde se espera unicidade.

Functional Dependency – analisa a dependência funcional entre colunas, por exemplo ocorrência de cidades em estados.

Value Inclusion – verifica relacionamento tipo Foreign Key entra colunas de tabelas diferentes, exemplo de ocorrência de código de cliente nas tabelas de vendas e cliente.

Análise individual das colunas:
Column Length Distribution – relação dos tamanhos distintos de string em uma coluna e o percentual de linhas de cada tamanho. Útil para identificar possíveis erros nos dados.

Column Null Ratio – retorna o percentual de ocorrências de NULL em uma coluna.

Column Pattern – retorna um conjunto de expressões regulares identificadas e o percentual de linhas de cada ocorrência.

Column Statistics – só aplicável a colunas numéricas, mostra: Min, Max, Média e Desvio Padrão.

Column Value Distribution – retorna todos os valores distintos de uma coluna e o percentual de linhas de cada ocorrência.

Tipos de dados indicados:



Você poderá combinar várias análises em uma única tarefa Data Profile, veja na imagem abaixo:

O arquivo XML gerado após a análise poderá ser visualizado com o utilitário Data Profile Viewer localizado no grupo de programas do SQL Server 2008 no submenu Integration Services. O exemplo abaixo mostra uma análise de distribuição de valores (Column Value Distribution Profile):

Até o próximo Post,
Landry.

SQL Server 2008 Community Launch

Lançamento do SQL Server 2008 no Brasil

O SQL Server Community Launch irá ocorrer simultaneamente em vários locais no Brasil durante o mês de Novembro de 2008, veja no link abaixo:

http://www.bufaloinfo.com.br/sqllaunch/mapa.htm

Estaremos confirmando o evento na Allen no sábado dia 8 de Novembro ou no seguinte, aguardem próximo post.

Landry