Existem ferramentas para realizar a comparação de dados entre dois esquemas diferentes?

11

Estamos migrando nosso banco de dados para um novo esquema, mas queremos validar se os dados foram movidos corretamente.

As ferramentas tradicionais de comparação de dados podem comparar dois bancos de dados quanto a diferenças se os esquemas forem iguais. No nosso caso, houve alterações nos designs das tabelas, mas todos os dados do esquema antigo estão no novo, apenas foram movidos um pouco, e preciso garantir que eles estejam corretos. Como temos dezenas de milhões de linhas, a inspeção manual não é uma opção.

Existem ferramentas que poderiam ajudar nesse tipo de comparação?

Caso contrário, existem bibliotecas / estruturas que poderiam ajudar a iniciar o desenvolvimento de uma solução personalizada?

É um prazer usar uma solução específica de banco de dados, se necessário, neste caso para o SQL Server 2008.

Minha solução: estou comparando os dois conjuntos de dados criando uma VIEWde cada tabela no banco de dados antigo com os mesmos campos da nova tabela de banco de dados.

Em seguida, comparo os dados usando a técnica descrita aqui: A maneira mais curta, rápida e fácil de comparar duas tabelas no SQL Server: UNION!

Tenho sorte nesta migração, pois a estrutura geral da tabela é semelhante ao banco de dados antigo, com campos movidos de uma tabela para outra, eliminados ou adicionados. No caso de descarte e adição, não há nada para comparar; para os campos que foram movidos ou agregados, faço cálculos na exibição para fornecer as informações corretas para comparação.

A UNIONcomparação mostra apenas as linhas com diferenças. Assim que os dados estiverem corretos, recebo um conjunto de resultados vazio.

Tony
fonte
1
Como você saberá que os dados estão corretos se os esquemas foram alterados? E se uma mesa tiver sido dividida ou combinada etc?
GBN
@AaronBertrand - Obrigado pelo seu comentário, mas na época (há 3 anos) eu investiguei a disponibilidade de ferramentas para isso, mas não encontrei nenhuma que fizesse uma comparação entre diferentes esquemas. Eu esperava que seu link fosse uma ferramenta que eu pudesse comprar, pois ainda preciso de uma.
Tony
@ Tony, você certamente pode fazer isso com a ferramenta Red-Gate (sem ter certeza de nenhuma das outras), basta fazer um mapeamento manual.
Aaron Bertrand
@ Tony Esquemas diferentes, o mesmo banco de dados? Ou esquemas diferentes, bancos de dados diferentes?
Aaron Bertrand

Respostas:

7

Não é impossível comparar dois esquemas diferentes, é um cálculo de quão confiante você está no resultado. Eu emprestei essencialmente de técnicas de reconciliação bancária

Importante: Essa reconciliação não é garantir que o destino corresponda exatamente à origem no contexto de dados (há um motivo para você migrar para um novo sistema), mas é necessário explicar quaisquer discrepâncias!

Base:

  1. Identifique as métricas que você usará para medir (ou seja: número total de usuários, soma de todas as idades, lista de IDs de usuários e códigos postais ...) Eu tento usar várias métricas de: Totais, Médias e amostras / registros detalhados
  2. Coloque esses dados em um local comum (por meio de visualizações / relatórios / o que for razoável)
  3. Compare seus dados e garanta que qualquer discrepância possa ser explicada

Geralmente, divido a comparação em vários métodos (em particular nas métricas detalhadas):

  • Por tabela: geralmente usando a tabela de origem como definição, criando um conjunto de visualizações no banco de dados de destino para tentar reproduzir os dados da tabela de origem
  • Por objeto: dependendo do banco de dados e do que você está armazenando, pode fazer mais sentido criar uma visão holística dos objetos (por exemplo, o usuário) em várias tabelas, semelhante à criação acima de um conjunto de visualizações para retornar esse objeto como um conjunto de resultados
  • Por relatórios: se o banco de dados de origem tiver um bom conjunto abrangente de relatórios de gerenciamento, outra técnica é reproduzir esses relatórios com a mesma formatação exata

Técnicas:

Não importa qual método eu usei para produzir o que será comparado, eu termino com um conjunto de arquivos / exibições / dbs que contêm os dados reconciliáveis ​​de origem e destino e, dependendo do meio, posso usar uma das ferramentas mais disponíveis para compará-los. Minhas próprias preferências são:

  1. Comparação de arquivos
    Crie duas pastas diferentes para o SourceDB e o DestinationDB (hora / versão carimbada para que eu saiba quando fiz a reconciliação) e despeje a saída de minhas métricas como arquivos com nomes relevantes e use uma ferramenta de comparação (como CSDiff ) para identificar diferenças

  2. Comparação do Excel
    Em particular, ao lidar com relatórios de gerenciamento, criarei um conjunto de pastas de trabalho do Excel para comparar os relatórios (em essência, usando VLookups e comparando totais)

  3. Comparação de dados
    Em vez de enviar os dados de reconciliação para arquivos ou relatórios, envie-os para separar bancos de dados e use algo como Redgate SQL Data Compare para comparar os bancos de dados

Outras ferramentas:

Não tentei nada disso, mas uma pesquisa rápida no Google sobre 'Ferramentas de reconciliação de dados' fornece:

Há outros, mas esses eram os que pareciam razoáveis

Andrew Bickerton
fonte
Obrigado pelas sugestões. Como você diz, não é impossível (estou trabalhando em uma solução no momento) é apenas difícil. Vou dar uma olhada nos métodos que você mencionou.
Tony
Não se preocupe @ Tony, o truque que encontrei é tentar dividi-lo em etapas menores e depois encontrar as ferramentas existentes para cada etapa (você precisará escrever algumas coisas personalizadas, é apenas minimizar esse esforço sempre que possível)
Andrew Bickerton
6

Se você deseja comparar dados em dois designs de banco de dados diferentes, é necessário escrever SQL codificado manualmente para comparar dados.

  • E se uma mesa tiver sido dividida ou combinada etc?
  • E se você tivesse datetime, agora você tem smalldatetime = data será diferente
  • ...

Não existe uma biblioteca de estrutura para verificar dados é a mesma em dois bancos de dados diferentes.

Só você sabe o que mudou ou modificou

gbn
fonte
Eu temia isso, mas pensei em perguntar se alguém fizesse essa comparação. Eu esperava que houvesse uma ferramenta para acelerar a escrita da consulta, mas como você diz, provavelmente terei que escrever algo do zero.
Tony
1
@Tony: sim: é porque qualquer ferramenta não pode separar "o que está errado" de "o que mudou"
gbn
5

Será impossível para você comparar esquemas diferentes. Para resolver seu problema, eu descobriria quais dados você precisa comparar. Eu criaria uma visão em cada servidor que retiraria os dados que eu queria comparar (leve em consideração tipos de dados e outros).

Uma vez que ambas as visualizações são iguais, eu usaria uma ferramenta de terceiros como o Red Gate Data Compare para ver quais linhas são diferentes.

Soa como uma dor. Boa sorte!

SqlSandwiches
fonte
1
Você diz que é impossível e, em seguida, fornece uma solução possível :) Na verdade, o método no qual eu estava trabalhando é semelhante à sua sugestão, exceto que não estou comparando o resultado usando uma ferramenta externa, mas fazendo tudo no SQL. Obrigado.
Tony
2

Alguns anos atrás, escrevi uma ferramenta para fazer exatamente isso - uma comparação de dados entre dois bancos de dados. Desde então, eu o convertei em um software comercial e publiquei em

www.sql-server-tool.com

  • uma licença única custa 99 $, mas você pode experimentá-la gratuitamente por 30 dias.

O programa - chamado SCT para "Ferramenta de comparação do SQL Server" (nunca fui bom em nomear coisas :) - tem muitas opções de ajuste fino, como: ignorar colunas selecionadas ou especificar o método de comparação (registro por registro ou chave primária / comparação de índices). As "sessões" de comparação podem ser salvas e reproduzidas posteriormente, sem a necessidade de inserir novamente os parâmetros. O parâmetro da linha de comando pode ser usado para automatizar totalmente as comparações.

Para dezenas de milhões de linhas, pode ser um pouco lento - nesse caso, recomendo começar com um subconjunto de dados menor - digamos, compare apenas as primeiras 1.000 linhas - e veja se é necessário algum ajuste fino do processo.

Dariusz Dziewialtowski-Gintowt

Dariusz Dziewialtowski-Gintowt
fonte
Obrigado por recomendar o seu aplicativo, eu o testei, mas ele não compara diferentes esquemas, e é isso que preciso fazer. Falha ao obter os dados da primeira tabela. Também não tenho certeza se o aplicativo manipulará a quantidade de dados que tenho, pois não parece haver uma maneira de limitar o número de linhas comparadas; a tabela em que testei tem 99 milhões de linhas.
Tony