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 VIEW
de 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 UNION
comparação mostra apenas as linhas com diferenças. Assim que os dados estiverem corretos, recebo um conjunto de resultados vazio.
Respostas:
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:
Geralmente, divido a comparação em vários métodos (em particular nas métricas detalhadas):
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:
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
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)
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
fonte
Se você deseja comparar dados em dois designs de banco de dados diferentes, é necessário escrever SQL codificado manualmente para comparar dados.
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
fonte
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!
fonte
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
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
fonte