Tutorial

Registrando modificações com o CDC

Posted in Tutorial, Vida Real on November 7th, 2010 by Silas Mendes – Be the first to comment

A edição Enterprise do SQL Server 2008 veio com uma funcionalidade nova e bastante interessante conhecida como CDC, abreviação de Change Data Capture. Esta função permite que o DBA capture e registre todas as mudanças feitas numa determinada tabela, de forma bastante simples.

Em versões anteriores do SQL Server, poderíamos utilizar triggers DML para suprir necessidades similares, e para isso tínhamos que programar a trigger que seria disparada e que gravaria a alteração em outra tabela; no entanto, este processo demandava esforço e exigia um controle na manutenção das triggers e tabelas de apoio. Com o CDC, a partir do momento que o DBA habilita-o em determinada tabela, o SQL Server se responsabiliza por toda a estrutura necessária para capturar e registrar as mudanças.

Como funciona?

O CDC captura e registra alterações baseado no log do SQL Server; basicamente ele utiliza o mesmo mecanismo da replicação transacional: o CDC lê o log do SQL Server e registra as alterações em suas tabelas. Note que este processo é assíncrono, ou seja, um dado é alterado e a alteração fica registrada no log; periodicamente é feita uma leitura no log e as alterações são registradas nas tabelas do CDC (criadas pelo SQL Server no schema CDC).

“Mão na massa”

Agora vamos exemplificar um cenário simples utilizando o CDC, monitorando uma única tabela.

No primeiro passo iremos criar a tabela que será utilizada em nossos testes:

-- Cria tabelas para teste

CREATE TABLE Funcionario (
codigoFuncionario INT NOT NULL,
nome VARCHAR(60),
idade INT,
numeroCPF CHAR(11)
);
GO
ALTER TABLE Funcionario
ADD CONSTRAINT PK_CodFunc
PRIMARY KEY (codigoFuncionario);

Agora ativamos o CDC na base de dados e na tabela Funcionario:

-- Habilita CDC banco

EXEC sys.sp_cdc_enable_db;
GO
-- Habilita CDC na tabela Funcionario

EXECUTE sys.sp_cdc_enable_table
@source_schema = 'dbo',
@source_name = 'Funcionario',
@role_name = 'roleCDC';

Ao habilitar o CDC, o SQL Server cria jobs que serão executados pelo SQL Server Agent. Estes jobs serão os responsáveis pelo registro das alterações nas tabelas do CDC; logo, para o CDC funcionar corretamente, lembre-se que o SQL Server Agent deve estar em execução.

Com o CDC habilitado, vamos popular a tabela Funcionario:

-- Carga de dados

INSERT INTO Funcionario (codigoFuncionario, nome, idade, numeroCPF)
VALUES
(1, 'Silas Mendes', 29, '08643238736'),
(2, 'Antonio Robberto', 36, '04686398765'),
(3, 'Joana Maxado', 45, '52341369844'),
(4, 'Roberto',null, null),
(5, 'Armando Filo', null, '41397601223');

Agora já podemos consultar a tabela do CDC que armazena as alterações na tabela Funcionario:

Observe que a tabela do CDC está no esquema CDC.

Lembre-se que este é um processo assíncrono, portanto ao executar o comando abaixo, pode ser que a tabela ainda não tenha sido atualizada; neste caso, repita a execução do comando.


SELECT * FROM cdc.dbo_Funcionario_CT;

No resultado são retornadas 9 colunas. Neste momento atente-se à coluna __$operation. Note que ela está com o valor: 2. O valor 2 significa que estes registros foram resultado de inserções.

Vamos continuar manipulando os dados para verificar os reflexos das alterações nas tabelas do CDC:

-- UPDATEs na tabela Funcionario

UPDATE Funcionario
SET Nome = 'Antonio Roberto'
WHERE codigoFuncionario = 2;

UPDATE Funcionario
SET Nome = 'Joana Machado'
WHERE codigoFuncionario = 3 ;

UPDATE Funcionario
SET Nome = 'Roberto Nespolitano',
Idade = 18, NumeroCPF = '08468354173'
WHERE codigoFuncionario = 3;

Observe o registro das alterações na tabela do CDC:

SELECT * FROM cdc.dbo_Funcionario_CT;

Agora observe que aumentou a quantidade de registros da tabela do CDC. Além das inserções (__$operation = 2) temos também o ANTES e DEPOIS nas operações de UPDATE. Observe agora que, onde o campo __$operation é igual a 3 o registro contém o estado antes do UPDATE, e onde o campo __$operation = 4 temos o estado do registro após o UPDATE.

Para finalizar nosso exemplo, vamos realizar uma exclusão e verificar como essa alteração é registrada:

DELETE FROM Funcionario
WHERE codigoFuncionario IN (2,3);

Execute novamente a consulta na tabela do CDC:

SELECT * FROM cdc.dbo_Funcionario_CT;

Agora notamos: onde o campo __$operation = 1 temos os registros que foram excluídos da tabela Funcionario.

CONCLUSÃO

Como observamos, basicamente são necessários 4 passos para utilizar o CDC:

  • Utilizar a versão Enterprise (ou superior) do SQL Server 2008;
  • O serviço SQL Server Agent deve estar ativo;
  • Ativar o CDC no banco de dados utilizando a procedure sp_cdc_enable_db;
  • Ativar o CDC nas tabelas que serão monitoradas utilizando a procedure sp_cdc_enable_table.

Vimos também que na tabela de registro do CDC temos diversos valores para o campo __$operation, sendo:

Comando DML __$operation
DELETE 1
INSERT 2
Antes do UPDATE 3
Depois do UPDATE 4

Hoje abordamos somente os processos básicos do CDC. Irei estender este assunto em outros  posts, onde pretendo abordar alguns detalhes interessantes desta nova feature do SQL Server 2008.

Até +

Habilitando suporte a rede no SQL 2008

Posted in Dica rápida, SQL SERVER 2008, SQL SERVER 2008 R2, Tutorial on June 11th, 2009 by Silas Mendes – 1 Comment

A partir da versão 2005 do SQL Server, algumas opções de configuração vem desabilitadas por padrão (e por uma questão de segurança), uma delas é o suporte a rede. Mas habilita-las é muito simples.

No menu Iniciar > Programas > Microsoft SQL Server 2008 > Configuration Tools escolha a opção SQL Server Configuration Manager (ou no menu Iniciar > Executar, digite SQLServerManager10.msc).

Na janela SQL Server Configuration Manager, expanda a opção SQL Server Network Configuration e clique na subopção que contém o nome da sua instância.

habilita_rede

No meu caso, o nome da minha instância é SQLEXPRESS2008, então selecionei a subopção Protocols for SQLEXPRESS2008.

Ao clicar, observe no lado direito os diversos protocolos de rede disponíveis. Para habilitar o suporte a sua rede TCP/IP, de um double-clique sobre esse protocolo. Na nova janela, na opção Enabled, selecione a opção Yes. Feito isto, clique em OK.

Agora é necessário reiniciar seu serviço SQL Server o que pode ser feito na mesma janela. Vá na opção SQL Server Services, escolha o serviço SQL Server e com o botão direito clique em Restart.

Instalando o SQL Server 2008 Express

Posted in SQL SERVER 2008, SQL SERVER 2008 R2, Tutorial on June 11th, 2009 by Silas Mendes – 17 Comments

Hoje vou descrever os passos BÁSICOS para a instalação do SQL Server 2008 Express, esta que é a edição gratuita do SQL Server e atende muito bem pequenas aplicações (além de ser uma ótima opção pra quem quer estudar esse banco).

Na edição gratuita do SQL Server 2000 (conhecida por MSDE) até mesmo alguns DBAs sofriam para instalá-la. De lá pra cá muita coisa mudou e hoje você já conta com ferramentas gráficas para instalar e gerenciar sua instância. Essa edição do SQL Server suporta 1 CPU (com suporte a multi-core), 1 GB de RAM e bases de dados de até 4 GB (para mais espaço de armazenamento consulte este post), e ao contrário do que muitas pessoas dizem, as edições Express tem suporte a rede; o fato é que essa opção vem desabilitada, mas é muito simples ativá-la.

Nesse post vou demonstrar a instalação do SQL Express + ferramentas. Se você desejar o mesmo, ao realizar o download escolha a opção Microsoft SQL Server 2008 Express with Tools (executável: SQLEXPRWT_x86_ENU.exe); o tamanho do executável é de aproximadamente 220 MB. Segue abaixo o link para download: http://www.microsoft.com/brasil/servidores/sql/editions/express.mspx Antes de iniciar a instalação do SQL Server Express você deverá verificar:

Após as devidas verificações e atualizações, podemos iniciar a instalação. Execute o arquivo SQLEXPRWT_x86_ENU.exe e observe que do lado esquerdo da tela que é apresentada existem as opções Planning, Installation, Maintenance e etc. Na guia Planning escolha a opção System Configuration Cheker.

tela1_sql2008

Neste momento será feita uma breve verificação para indicar se falta algo para o andamento da instalação. Obtendo um retorno positivo clique em Ok e selecione na guia Installation a opção New SQL Server stand-alone installation or add features to an existing installation (Nova instalação ou adiciona opções para uma instalação já existente).

tela3_sql2008

O instalador fará uma nova verificação, se estiver tudo certo (para ver os detalhes dessa verificação clique no botão Show Details) clique no botão OK.


tela4

Na próxima tela clique em Install para instalar os arquivos que darão suporte ao restante da instalação. Clique Next.

Na tela Product Key clique em Next (observe que você não precisa de uma chave já que é esta é uma versão free). Marque a opção: “I accept the license terms” e clique em Next. Quando esta etapa finalizar, você irá escolher o que deseja instalar. Marque somente a opção Database Engine Services. Essa opção instalará o engine do SQL Server Express. Se desejar instalar também as ferramentas marque a opção Management Tools – Basic

tela5

Na próxima tela você deverá escolher por uma instância padrão (Default Instance) ou uma instância nomeada (Named Instance). Esta etapa define o nome pelo qual seu servidor SQL irá responder. Se escolher pela instância padrão o SQL terá o mesmo nome de seu servidor, se for uma instância nomeada o SQL irá atender por: NOME_SERVIDOR\NOME_SQL. 

tela6

Clique em Next.

A próxima tela traz um resumo sobre o espaço em disco que será utilizado. Clique em Next.

A seguir você deverá informar sob qual conta do Windows rodarão os serviços do SQL Server. No meu caso, como estou instalado no notebook, na caixa Account Name vou escolher a conta AUTORIDADE NT\SYSTEM para o serviço do SQL e o padrão para o SQL Browser. Em casos onde seu SQL Server utilizar recursos de rede será importante utilizar uma conta de domínio.

Clicando em Next você deverá optar pelo modo de autenticação no SQL. As duas opções são:

Windows Authentication Mode – Nessa opção, apenas contas do Windows poderão autenticar no seu SQL.

Mixed Mode – Nessa opção, poderão autenticar tanto contas Windows e contas criadas posteriormente dentro do SQL.

A Mixed Mode é a mais utilizada (apesar de não ser a recomendada pela Microsoft).

Nesse post vou escolher a opção Mixed Mode e definir uma senha para a conta system administrator (SA). Também irei adicionar uma conta Windows ao grupo de administradores do SQL. Você pode adicionar uma conta de administrador e também o usuário atual clicando no botão Add Current User. 

tela7

O SA é o usuário master do seu SQL Server, por isso não atribua uma senha fraca a ele e não ESQUEÇA essa senha .

Se estiver em dúvida sobre o modo de autenticação que deve usar, fique tranqüilo, essa configuração pode ser alterada depois. Como estamos realizando uma instalação padrão, neste momento ignore as abas Data Directories e FILESTREAM. Clique em Next.

A próxima tela pergunta se você deseja enviar automaticamente relatórios de possíveis erros para a Microsoft. Faça sua escolha e clique em Next. Agora o instalador faz uma nova verificação para validar os parâmetros informados até aqui. Se estiver tudo ok, clique em Next.

Verifique o resumo da instalação e finalmente clique em Install. Agora é só aguardar a finalização da instalação.

Considerações: Se você realizar essa instalação numa maquina com Windows XP em português, ao final poderá encontrar o seguinte erro na instalação:

tela8

Segundo a Microsoft isso não é efetivamente um erro. Isso ocorre quando tentamos instalar uma versão inglês do SQL Server (2005 ou 2008) num Windows XP SP3 não-inglês (como já comentei neste post).

Neste texto abordei somente os passos básicos para a instalação do SQL Server 2008 Express. Pretendo detalhar outras opções nos próximos posts… no próximo iremos habilitar o acesso a rede, por enquanto, bom trabalho e bons estudos.

Veja como habilitar suporte a rede aqui.