Seções iMasters
Banco de Dados + Desenvolvimento + SQL Server

Comparação de base de dados

Olá pessoal. Na coluna desta semana falarei sobre um assunto muito importante que geralmente é realizado por um DBA com bastante freqüência: a comparação de bases de dados.

Devido a novas tecnologias, cada vez mais empresas vêm se empenhando em montar diversos ambientes, sejam eles de produção ou não, que podem conter informações divergentes. Além destes ambientes, cada sistema adotado pela empresa pode interagir com uma base de dados, o que implica na utilização de uma técnica para a comparação de bases de dados em diferentes ambientes e sistemas.

A comparação de bases de dados é uma tarefa que requer cuidados especiais. Neste artigo apresentarei três soluções simples para realizar a comparação de bancos de dados de diferentes ambientes

Ambiente de Desenvolvimento x Ambiente de Produção

As empresas cada vez mais estão investindo em tecnologia da informação, seja na parte de hardware ou de software. Para facilitar a gerência dos recursos, isto é, dos computadores, do cabeamento, da instalação de softwares etc, as empresas geralmente montam ambientes. Estes ambientes são compostos pelo conjunto de recursos computacionais, sejam eles hardware ou software, específicos para um determinado propósito. Como exemplo, podemos imaginar um ambiente montado para a execução de uma aplicação que trabalha com grandes quantidades de dados. Este ambiente vai demandar de recursos computacionais específicos para este fim, como o uso de uma rede de comunicação adequada, áreas de armazenamento grandes e softwares preparados para tratar um grande volume de dados.

É mais comum encontrar uma separação de ambientes nas empresas que estão implantando um sistema ou estão desenvolvendo novas funcionalidades. Esta separação envolve a divisão deste ambiente em dois: o ambiente de desenvolvimento e o ambiente de produção.

O ambiente de desenvolvimento é composto por uma plataforma completa para auxiliar o desenvolvimento. É comum nestes ambientes a existência de diferentes versões de software que devem ser homologadas antes de serem utilizadas na produção. O processo de homologação, a grosso modo, é a etapa onde as funcionalidades do sistema são verificadas pelos usuários, com o objetivo de identificar se o sistema se comporta como o que foi especificado nos requisitos. Como pode haver alguma diferença entre o que foi especificado e o que foi implementado, é necessário realizar a homologação em um ambiente especial. Após a homologação, o sistema está pronto para ser implantado no ambiente onde os usuários vão trabalhar com os dados oficiais, isto é, o ambiente de produção.

É importante para os desenvolvedores contar com um ambiente que pode ser modificado sem grandes impactos, pois com este recurso obtém-se liberdade não apenas para experimentar novas idéias, mas também para testá-las em um ambiente seguro e similar ao ambiente na qual a aplicação vai ser executada com dados reais. É comum encontrar dados simulados ou mesmo incompletos neste tipo de ambiente voltado para o desenvolvimento.

O banco de dados do ambiente de desenvolvimento raramente vai conter as mesmas informações do banco de dados do ambiente de produção. Isso acontece por que durante a elaboração de um software os desenvolvedores modificam os dados para conduzir os testes, fazer análises de desempenho e também para validar o que foi desenvolvido.

Por ser um ambiente adicional, geralmente o ambiente de desenvolvimento não conta com a mesma capacidade de processamento, armazenamento e memória do ambiente de produção. Além do mais, muitas empresas atualmente estão utilizando a tecnologia de virtualização para montar seus ambientes de desenvolvimento.

A tecnologia de virtualização possibilita a emulação completa de diversos servidores em apenas um, permitindo a instalação de diversos sistemas operacionais, bancos de dados e quaisquer outros softwares em um mesmo servidor, que é responsável por criar máquinas virtuais que emulam servidores reais. Desta maneira, as equipes de T.I. não precisam dispor de servidores físicos para montar seus ambientes de desenvolvimento. Os softwares VMWare e o Xen são dois exemplos de softwares que trabalham com a tecnologia de virtualização.

Para resumir, podemos deixar claro que a principal diferença entre um ambiente de produção e um ambiente de desenvolvimento é a relação entre os recursos que eles dispõem. Além desta diferença, também se percebe que o ambiente de desenvolvimento pode ser visto como um ambiente para a implementação de ensaios, onde os desenvolvedores podem realizar muitos testes em um ambiente controlado e isolado do ambiente de produção.

Alternativas de comparação

Existe diversas alternativas para a comparação de bases de dados. Porém antes de começar a comparação das bases de dados é preciso saber o que comparar. Na maioria das vezes o DBA, ou quem quer que esteja realizando a comparação de bases, quer saber se a estrutura de uma tabela está diferente, se uma stored procedure está faltando ou mesmo se a quantidade de linhas de duas tabelas de bancos de dados está diferente.

Em vez de citar cada solução disponível para a comparação de bases de dados para o SQL Server falarei apenas de algumas opções básicas. Caso o leitor deseje se aprofundar mais em alguma solução recomendo uma pesquisa mais extensa sobre o assunto.

Antes de comentar sobre as alternativas de comparação é preciso montar um banco de dados de exemplo. No script da Listagem 1 abaixo são criados dois bancos de dados no SQL Server, chamados de A e B em um mesmo servidor. Vamos supor que o banco de dados A é o banco de dados do ambiente de produção e o banco de dados B é do ambiente de desenvolvimento. Tanto o banco A como o banco B possuem as tabelas TB_DIFERENTE, com estruturas diferentes, a tabela TB_IGUAL, com estrutura igual mais com dados diferentes, e a procedure PROC_DIFERENTE, que contém o código fonte ligeiramente modificado.

USE MASTER
go

CREATE DATABASE A
GO

USE A
GO

CREATE TABLE TB_DIFERENTE
(
ID INT,
NOME VARCHAR(100)
)
GO

CREATE TABLE TB_IGUAL
(
COLUNA1 INT PRIMARY KEY,
COLUNA2 INT
)
GO

INSERT TB_IGUAL VALUES(1,1)
INSERT TB_IGUAL VALUES(2,2)
INSERT TB_IGUAL VALUES(3,3)
INSERT TB_IGUAL VALUES(4,4)
GO

CREATE PROCEDURE PROC_DIFERENTE
AS
BEGIN
SELECT GETDATE() AS DATA_ATUAL
END
GO


CREATE DATABASE B
GO

USE B
GO

CREATE TABLE TB_DIFERENTE
(
ID VARCHAR(10),
NOME NVARCHAR(100)
)
GO


CREATE TABLE TB_IGUAL
(
COLUNA1 INT PRIMARY KEY,
COLUNA2 INT
)
GO

INSERT TB_IGUAL VALUES(1,2)
INSERT TB_IGUAL VALUES(2,3)
INSERT TB_IGUAL VALUES(3,4)
INSERT TB_IGUAL VALUES(4,1)
GO


CREATE PROCEDURE PROC_DIFERENTE
AS
BEGIN
SELECT GETDATE() AS DT_ATUAL
END
GO

Listagem 1. Script que cria os bancos de dados A e B

A primeira alternativa que comentarei é a stored procedure chamada sp_CompareDB desenvolvida originalmente por Viktor Gorodnichenko. A idéia esta stored procedure é receber como parâmetro dois bancos de dados e realizar uma comparação na estrutura de tabelas e dados. O seu uso é muito simples, pois basta passar como parâmetro os nomes dos bancos de dados a serem comparados, como a Figura 1 mostra.

Figura 1. Comparação das bases de dados A e B com a stored procedure sp_CompareDBFigura 1. Comparação das bases de dados A e B com a stored procedure sp_CompareDB

Nota-se pela figura 1 que o resultado da stored procedure é apresentado no formato texto e na aba Messages do Management Studio, a ferramenta de administração integrada do SQL Server 2005. A stored procedure indicou que a tabela TB_DIFERENTE possui tipos de dados diferentes para as colunas ID e NOME. Além disso, a stored procedure também indicou que a tabela TB_IGUAL contém dados diferentes para as colunas que não fazem parte da chave primária.

A comparação realizada pela stored procedure sp_CompareDB é uma comparação simples, que deve ser utilizada principalmente quando desejamos comparar rapidamente a estrutura das tabelas. Além disso, pode-se modificar a stored procedure da maneira que se desejar, pois o código fonte dela é fornecido no final deste artigo.

Uma outra ferramenta de comparação de base de dados interessante é o SQL Server Compare da empresa Yessoft (http://www.yessoft.com/dnn/). Esta ferramenta foi indicada por um colega meu (valeu Fábio!) e pode ser utilizada sem a compra de licença. Na verdade não consegui descobrir qual é a licença deste software, porém pelo instalador me parece que não é GPL ou shareware. Esta ferramenta está mais para a linha do freeware. Após uma instalação rápida podemos iniciar a ferramenta e indicar quais bancos de dados de quais servidores serão comparados, como a Figura 2 apresenta.

Figura 2. Interface gráfica do SQL Server Compare.Figura 2. Interface gráfica do SQL Server Compare.

Pela Figura 2 podemos perceber que existe a possibilidade de comparar bancos de dados de diferentes servidores. Podemos modificar as configurações de usuário e senha do banco desabilitanto a opção Use Integrated Security e clicando no link Update Database List. Também podemos escolher os objetos a serem comparados por meio de vários check boxes localizados na interface. Ao clicarmos no botão Compare podemos ver a listagem dos objetos que apresentam diferenças. No nosso exemplo a stored procedure PROC_DIFERENTE e a tabela TB_DIFERENTE dos bancos de dados A e B apresentam diferenças. Nota-se que o SQL Server Compare não trabalha com a comparação de dados.

Podemos visualizar as diferenças entre objetos. Por exemplo: se selecionarmos a stored procedure PROC_DIFERENTE e clicarmos no botão View Diff teremos uma janela de comparação muito parecido com os softwares de controle de versão (SourceSafe, CVS, Subversion, etc) onde cada linha diferente é identificada. A tela de comparação é apresentada na Figura 3.

Figura 3. Comparação do código fonte da Stored Procedure PROC_DIFERENTE.Figura 3. Comparação do código fonte da Stored Procedure PROC_DIFERENTE.

Para finalizar apresentarei uma ferramenta de comparação de dados do próprio SQL Server. Esta ferramenta na verdade é um utilitário de linha de comando chamado tablediff.exe que já vem com o SQL Server 2000 e 2005. Este arquivo está localizado no subdiretório “\COM” a partir do local onde o SQL Server foi instalado. Por exemplo: “C:\Arquivos de programas\Microsoft SQL Server\90\COM.”

Para utilizar esta ferramenta é preciso indicar o servidor, o banco e a tabela de origem e destino, isto é, a localização completa das tabelas cujos dados devem ser comparados. Para a comparação ser realizada é preciso que as tabela possuam a mesma estrutura, ou seja, as mesmas colunas e tipos de dados.

Além destes parâmetros podemos indicar também o local e o nome de um arquivo .sql que conterá as instruções INSERT, UPDATE, e DELETE necessárias para tornar as duas tabelas iguais. Estas instruções devem ser aplicadas na tabela de destino. A Figura 4 apresenta um exemplo da utilização do utilitário tablediff.exe.

Figura 4. Exemplo de utilização do utilitário tablediff.exe.Figura 4. Exemplo de utilização do utilitário tablediff.exe.

Para obter um exemplo real de utilização do tablediff recomendo a vídeo aula de minha autoria localizada no link http://www.devmedia.com.br/articles/viewcomp.asp?comp=4886.

O script utilizado para a criação de bases de dados neste artigo e a ferramenta SQL Server Compare são disponibilizados neste link.

Um grande abraço e até a próxima pessoal.

Mensagem do anunciante:

Torne-se um Parceiro de Software Intel®. Filie-se ao Intel® Developer Zone. Intel®Developer Zone

Comente também

9 Comentários

Thiago Rodrigues de Brito

Mauro, gostei muito do seu artigo me ajudou bastante.

Parabens pela materia.

Mauro Pichiliani,

O script com a ferramenta SQL Server Compare está corrompido. Não consegui visualizar o arquivo. Se for possível. Você pode corrigir?

“O script utilizado para a criação de bases de dados neste artigo e a ferramenta SQL Server Compare são disponibilizados neste link.”

Obrigado,

Rodrigo

Mauro Pichiliani,

O script com a ferramenta SQL Server Compare está corrompido. Não consegui visualizar o arquivo. Se for possível. Você pode corrigir?

“O script utilizado para a criação de bases de dados neste artigo e a ferramenta SQL Server Compare são disponibilizados neste link.”

Obrigado,

Rodrigo

    Mauro Pichiliani

    Rodrigo,

    Eu fiz um teste com o arquivo .zip e não tive nenhum problema. Tente fazer o download novamente.

    Mauro Pichiliani

rodrigo

Alguem conhece alguma ferramenta que faz o mesmo, porem em bancos oracle?

    Alexandre

    Ferramenta profissional também indicada é o TOAD. Usei muito e indico. Tem uma versão que é free, mas obviamente com algumas limitações. Mas vale dar uma olhada. Boa sorte.

faustino

Este post que me ajudou bastante.
Parabéns Mauro Pichiliani, por estar sempre disponibilizando informações importantes e úteis a comunidade.

Armstrong

Para Oracle vc faz no SqlDeveloper.

Qual a sua opinião?