Como comparar dosi bancos no sql server

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.


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

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Se você fez alterações no esquema de origem ou de destino após a migração, pode comparar os dois esquemas de bancos de dados usando a AWS SCT. Você pode comparar esquemas para versões iguais ou anteriores do esquema de origem.

As seguintes comparações de esquemas são compatíveis:

  • Oracle para Oracle, versões 12.1.0.2.0, 11.1.0.7.0, 11.2.0.1.0, 10

  • SQL Server para SQL Server, versões 2016, 2014, 2012, 2008 RD2, 2008

  • PostgreSQL para PostgreSQL e Aurora PostgreSQL, versões 9.6, 9.5.9, 9.5.4

  • MySQL para MySQL versões 5.6.36, 5.7.17, 5.5

Você especifica as configurações para a comparação de esquemas na guia Compare Schema (Comparar esquema) na página Project Settings (Configurações do projeto).

Para comparar esquemas, selecione-os e a AWS SCT indica os objetos que são diferentes entre os dois esquemas e os objetos que são iguais.

Para comparar dois esquemas

  1. Abra um projeto da existente da AWS SCT ou crie um projeto e conecte-o aos endpoints de origem e de destino.

  2. Selecione o esquema que você deseja comparar.

  3. Abra o menu de contexto (botão direito do mouse) e escolhaComparar o esquema.

A AWS SCT indica os objetos que são diferentes entre os dois esquemas, adicionando um círculo preto em volta do ícone do objeto.

Você pode aplicar os resultados da comparação de esquemas a um único objeto, a uma única categoria de objetos ou a todo o esquema. Marque a caixa de seleção próxima à categoria, ao objeto ou ao esquema em que você deseja aplicar os resultados.

Como comparar dosi bancos no sql server

Muitos colegas já tiveram a necessidade de comparar duas bases de dados no SQL Server para analisar rapidamente a diferença entre elas.

Como é algo recorrente, estou publicando aqui uma consulta (query) que compara a estrutura de duas bases e destaca tabelas e campos que existem em uma e não na outra, bidirecionalmente.

Bases de exemplo

Imagine que você tem um BANCO_A:

use BANCO_A; go create table Person ( id int primary key identity, name varchar(100), height numeric(4,1) ); create table Car ( id int primary key identity, brand varchar(100), model varchar(100), year int ); create table Animal ( id int primary key identity, name varchar(100), kind varchar(100) );

E também um BANCO_B:

use BANCO_B; go create table Person ( id int primary key identity, name varchar(100) ); create table Car ( id int primary key identity, brand varchar(100), model varchar(100), year float, kilometers int ); create table Pet ( id int primary key identity, name varchar(100) );

Verificando tabelas adicionadas e excluídas

Para identificar somente as tabelas que foram adicionadas ou excluídas de uma base para outra, use a seguinte consulta:

SELECT T1.TABLE_NAME 'DB1 TABLE', T2.TABLE_NAME 'DB2 TABLE' FROM BANCO_A.INFORMATION_SCHEMA.TABLES T1 FULL JOIN BANCO_B.INFORMATION_SCHEMA.TABLES T2 ON T1.TABLE_NAME = T2.TABLE_NAME ORDER BY ISNULL(T1.TABLE_NAME, T2.TABLE_NAME)

Verificando colunas adicionadas e excluídas

Para verificar as diferenças tanto das tabelas como das colunas que elas contém, use a seguinte consulta:

SELECT DB1.TABLE_NAME 'DB1 TABLE', DB1.COLUMN_NAME 'DB1 COLUMN', DB1.DATA_TYPE 'DB1 TYPE', DB2.TABLE_NAME 'DB2 TABLE', DB2.COLUMN_NAME 'DB1 COLUMN', DB2.DATA_TYPE 'DB2 TYPE' FROM ( SELECT T1.TABLE_NAME, C1.COLUMN_NAME, C1.DATA_TYPE FROM BANCO_A.INFORMATION_SCHEMA.TABLES T1 JOIN BANCO_A.INFORMATION_SCHEMA.COLUMNS C1 ON C1.TABLE_NAME = T1.TABLE_NAME ) DB1 FULL JOIN ( SELECT T2.TABLE_NAME, C2.COLUMN_NAME, C2.DATA_TYPE FROM BANCO_B.INFORMATION_SCHEMA.TABLES T2 JOIN BANCO_B.INFORMATION_SCHEMA.COLUMNS C2 ON C2.TABLE_NAME = T2.TABLE_NAME ) DB2 ON DB1.TABLE_NAME = DB2.TABLE_NAME AND DB1.COLUMN_NAME = DB2.COLUMN_NAME ORDER BY ISNULL(DB1.TABLE_NAME, DB2.TABLE_NAME), ISNULL(DB1.COLUMN_NAME, DB2.COLUMN_NAME)

Executando a consulta dinamicamente

Nos dois exemplos acima, basta trocar BANCO_A e BANCO_B por duas bases que você precisa comparar.

Entretanto, pode ser que você queira criar uma procedure ou rotina que compare duas bases quaisquer.

Para isso você pode executar uma consulta dinâmica usando o comando SP_SQLEXEC. Veja o seguinte exemplo:

DECLARE @BANCO1 NVARCHAR(100) = 'BANCO_A', @BANCO2 NVARCHAR(100) = 'BANCO_B', @SQL NVARCHAR(2000) SET @SQL = N'SELECT T1.TABLE_NAME ''DB1 TABLE'', T2.TABLE_NAME ''DB2 TABLE'' FROM ' + @BANCO1 + '.INFORMATION_SCHEMA.TABLES T1 FULL JOIN ' + @BANCO2 + '.INFORMATION_SCHEMA.TABLES T2 ON T1.TABLE_NAME = T2.TABLE_NAME ORDER BY ISNULL(T1.TABLE_NAME, T2.TABLE_NAME)'; EXEC sp_sqlexec @SQL

Agora basta alterar o valor das variáveis ou receber os nomes das duas bases através de parâmetros.

Duas observações importantes:

  1. O parâmetro da rotina SP_SQLEXEC deve ser do tipo NVARCHAR.
  2. Não tente fazer a concatenação de variáveis e literais diretamente no argumento dessa rotina. Faça isso sempre antes e então passe uma variável como argumento. Não fiz o teste em todas as versões do SQL Server, mas nas que usei deve ser desta forma.

Estamos usando uma solução desenvolvida internamente que é basicamente um procedimento com argumentos do que você deseja incluir na comparação (código SP, Full SP, estrutura de tabela, padrões, índices, gatilhos, etc.).

Dependendo de suas necessidades e orçamento, pode ser um bom caminho para você também.

Também é facilmente desenvolvido, então apenas redirecionamos a saída do procedimento para arquivos de texto e fazemos comparações de texto entre os arquivos.

Uma coisa boa sobre isso é que é possível salvar a saída no controle de origem.

/ B

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;
EU IRIASALÁRIONOMEDEPT_ID
134000ANURAGDESENVOLVEDORES DE IU
233000SEVERODESENVOLVEDORES DE BACKEND
336000SUMITDESENVOLVEDORES DE BACKEND
436000RUHIDESENVOLVEDORES DE IU
537000KAEDESENVOLVEDORES DE IU

O resultado do SQL Server Management Studio: 

Como comparar dosi bancos no sql server

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;
EU IRIASALÁRIONOMEDEPT_ID
134000ANURAGDESENVOLVEDORES DE IU
233000SEVERODESENVOLVEDORES DE BACKEND
336000SUMITDESENVOLVEDORES DE BACKEND
436000RUHIDESENVOLVEDORES DE IU
537000KAEDESENVOLVEDORES DE IU
637000REHADESENVOLVEDORES DE BACKEND

Saída:

Como comparar dosi bancos no sql server

Comparando os resultados das duas consultas

Suponhamos 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(*) = 1

Exemplo:

Select ID from ( select * from department_old UNION ALL select * from department_new) department_old GROUP BY ID HAVING COUNT(*) = 1

Saída:

Como comparar dosi bancos no sql server

Se os valores nas colunas envolvidas na comparação forem idênticos, nenhuma linha retornará.