Descrição detalhada do produto Normalmente, os dados do dbForge Data Compare for SQL Server são usados em ambientes que compartilham um objeto de banco de dados em vários bancos de dados. A ferramenta é essencial quando os mesmos estão fora de sincronia, devido à falta de rede ou erros humanos que diferem na estrutura e necessidade de sincronização de dados personalizados, ou quando você está movendo dados entre os ambientes durante o desenvolvimento e não precisam de replicação. Show O que o SQL Server DBAs e os desenvolvedores podem fazer com essas ferramentas de comparar dados? • Realizar uma comparação de banco de dados do SQL Server para detectar mudanças • Comparar backups do SQL Server com os bancos de dados ao vivo • Analisar as diferenças de dados entre dois bancos de dados • Sincronizar dois bancos de dados que estão fora de sincronia • Restaurar dados de uma tabela em particular a partir do backup • Gerar relatórios de comparação de dados em Excel e HTML • Olhar cópia de dados do banco de desenvolvimento para produção • Automatize tarefas de sincronização de dados de rotina com a interface de linha de comando O software é fornecido como um aplicativo independente. No entanto, o pacote inclui um add-in para a ferramenta de administração do SQL Server padrão - Microsoft SQL Server Management Studio. A integração de comparação de dados em SSMS permite o lançamento de sua comparação diretamente do menu de contexto do Object Explorer, bem como do menu principal do SSMS. Por que escolher este software? Ele conta com um excelente desempenho ao comparar grandes bancos de dados, possui amplo suporte de versões do SQL Server, reduz o tempo de inatividade do sistema causados por erros de replicação de dados e acelera a recuperação. Ele também acelera o desenvolvimento de aplicações, graças a rápida implantação de alterações de dados e constrói cenários de sincronização de dados personalizados a baixo custo. Eleve a sua comparação de dados e sincronização para um nível profissional. Encontre as melhores práticas utilizadas pelo dbForge Data Compare for SQL Server. Confira você mesmo! Requisitos Compatibilidade do Microsoft SQL Server • SQL Server 2014, 2012, LocalDB • SQL Server 2008, 2008R2 (incluindo a edição Express) • SQL Server 2005 (incluindo a edição Express) • SQL Server 2000 • SQL Azure Requisitos do sistema • .NET Framework 3.5 SP1 ou superior instalado • Processador de 2 GHz ou superior • 1024 MB de RAM • 100 MB de espaço livre em disco • Microsoft Windows XP/7/8/8.1, e Windows Server 2008/2012 Nota: O .NET Framework está pré-instalado no Microsoft Windows Vista e no Windows 7/8/8.1
Structured Query Language ou SQL é uma linguagem de banco de dados padrão que é usada para criar, manter e recuperar os dados de bancos de dados relacionais como MySQL, Oracle, etc. Aqui vamos ver como comparar e encontrar diferenças entre duas tabelas em SQL Aqui, primeiro criaremos um banco de dados denominado “geeks” e, em seguida, criaremos duas tabelas “ department_old ” e “ department_new ” nesse banco de dados. Em seguida, executaremos nossa consulta nessa tabela. Criando banco de dados :.Use a instrução SQL abaixo para criar um banco de dados chamado geeks : CREATE geeks;Usando banco de dados:USE geeks;Definição de tabela para a tabela department_old :CREATE TABLE department_old( ID int, SALARY int, NAME Varchar(20), DEPT_ID Varchar(255));Adicione valores à tabela:Use a consulta abaixo para adicionar dados à tabela: INSERT INTO department_old VALUES (1, 34000, 'ANURAG', 'UI DEVELOPERS'); INSERT INTO department_old VALUES (2, 33000, 'HARSH', 'BACKEND DEVELOPERS'); INSERT INTO department_old VALUES (3, 36000, 'SUMIT', 'BACKEND DEVELOPERS'); INSERT INTO department_old VALUES (4, 36000, 'RUHI', 'UI DEVELOPERS'); INSERT INTO department_old VALUES (5, 37000, 'KAE', 'UI DEVELOPERS');Para verificar o conteúdo da tabela, use a declaração abaixo: SELECT * FROM department_old;
O resultado do SQL Server Management Studio: Definição de tabela para a nova tabela department :CREATE TABLE department_new( ID int, SALARY int, NAME Varchar(20), DEPT_ID Varchar(255));Adicione valores à tabela:Use a consulta abaixo para adicionar dados à tabela: INSERT INTO department_new VALUES (1, 34000, 'ANURAG', 'UI DEVELOPERS'); INSERT INTO department_new VALUES (2, 33000, 'HARSH', 'BACKEND DEVELOPERS'); INSERT INTO department_new VALUES (3, 36000, 'SUMIT', 'BACKEND DEVELOPERS'); INSERT INTO department_new VALUES (4, 36000, 'RUHI', 'UI DEVELOPERS'); INSERT INTO department_new VALUES (5, 37000, 'KAE', 'UI DEVELOPERS'); INSERT INTO department_new VALUES (6, 37000, 'REHA', 'BACKEND DEVELOPERS');Para verificar o conteúdo da tabela, use a declaração abaixo: SELECT * FROM department_new;
Saída: Comparando os resultados das duas consultasSuponhamos que temos duas tabelas: tabela1 e tabela2 . Aqui, usaremos UNION ALL para combinar os registros com base nas colunas que precisam ser comparadas. Se os valores nas colunas que precisam ser comparados forem iguais, COUNT (*) retornará 2, caso contrário, COUNT (*) retornará 1. Sintaxe: SELECT column1, column2.... columnN FROM ( SELECT table1.column1, table1.column2 FROM table1 UNION ALL SELECT table2.column1, table2.column2 FROM table2 ) table1 GROUP BY column1 HAVING COUNT(*) = 1Exemplo: Select ID from ( select * from department_old UNION ALL select * from department_new) department_old GROUP BY ID HAVING COUNT(*) = 1Saída: Se os valores nas colunas envolvidas na comparação forem idênticos, nenhuma linha retornará. 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 MASTERgoCREATE DATABASE AGOUSE AGOCREATE TABLE TB_DIFERENTE( ID INT, NOME VARCHAR(100))GOCREATE TABLE TB_IGUAL( COLUNA1 INT PRIMARY KEY, COLUNA2 INT)GOINSERT TB_IGUAL VALUES(1,1)INSERT TB_IGUAL VALUES(2,2)INSERT TB_IGUAL VALUES(3,3)INSERT TB_IGUAL VALUES(4,4)GOCREATE PROCEDURE PROC_DIFERENTEASBEGIN SELECT GETDATE() AS DATA_ATUALENDGOCREATE DATABASE BGOUSE BGOCREATE TABLE TB_DIFERENTE( ID VARCHAR(10), NOME NVARCHAR(100))GOCREATE TABLE TB_IGUAL( COLUNA1 INT PRIMARY KEY, COLUNA2 INT)GOINSERT TB_IGUAL VALUES(1,2)INSERT TB_IGUAL VALUES(2,3)INSERT TB_IGUAL VALUES(3,4)INSERT TB_IGUAL VALUES(4,1)GOCREATE PROCEDURE PROC_DIFERENTEASBEGIN SELECT GETDATE() AS DT_ATUALEND 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_CompareDBNota-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.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.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.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. |