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 em busca de diferenças se os esquemas forem os mesmos. 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 ter certeza de que estão corretos. Temos dezenas de milhões de linhas, portanto a inspeção manual não é uma opção.
Existem ferramentas que possam auxiliar nesse tipo de comparação?
Caso contrário, existem bibliotecas/frameworks que possam ajudar a iniciar o desenvolvimento de uma solução personalizada?
Fico feliz em 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 um VIEW
de cada tabela no banco de dados antigo com os mesmos campos da nova tabela do 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 !
Tive sorte nessa migração, pois a estrutura geral da tabela é semelhante ao banco de dados antigo, com campos movidos de uma tabela para outra, descartados ou adicionados. No caso dos descartados e adicionados não há o que comparar, para os campos que foram movidos ou agregados eu faço cálculos na view para fornecer as informações corretas para comparação.
A UNION
comparação me mostra apenas as linhas com diferenças, portanto, assim que os dados estiverem corretos, obtenho um conjunto de resultados vazio.
Não é impossível comparar dois esquemas diferentes, é um cálculo de quão confiante você está no resultado. Eu basicamente peguei emprestado das técnicas de reconciliação bancária
Importante: Esta reconciliação não é para garantir que o destino corresponda exatamente à origem em seu contexto de dados (há um motivo para você estar migrando para um novo sistema), mas você precisa explicar quaisquer discrepâncias!
Base:
Eu geralmente divido a comparação em vários métodos (em particular para as métricas detalhadas):
Técnicas:
Não importa qual método eu usei para produzir o que será comparado, eu acabo com um conjunto de arquivos/views/dbs que contém os dados conciliáveis de Origem e Destino, dependendo da mídia, posso usar uma das ferramentas comumente disponíveis para compará-los. Minhas próprias preferências são:
Comparação de arquivos
Crie duas pastas diferentes para SourceDB e DestinationDB (hora/versão marcada para que eu saiba quando fiz a reconciliação) e despeje a saída de minhas métricas como arquivos com nomes relevantes e, em seguida, use uma ferramenta de comparação (como CSDiff ) para identificar as 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 bancos de dados separados e use algo como Redgate SQL Data Compare para comparar os bancos de dados
Outras ferramentas:
Não tentei nenhum desses, mas uma rápida pesquisa no Google em 'Ferramentas de reconciliação de dados' fornece:
Há outros, mas esses foram os que pareciam razoáveis
Se você quiser comparar dados em dois designs de banco de dados diferentes, precisará escrever SQL codificado à mão para comparar dados.
Não existe uma biblioteca de estrutura para verificar se os dados são os mesmos em dois bancos de dados diferentes.
Só você sabe o que mudou ou modificou
Vai ser impossível para você comparar esquemas diferentes. Para resolver seu problema, eu descobriria quais dados você precisa comparar. Em seguida, criaria uma exibição em cada servidor que recuperaria os dados que desejava comparar (leve em consideração os tipos de dados e outros).
Uma vez que ambas as exibições são iguais, eu usaria uma ferramenta de terceiros como o Red Gate Data Compare para ver quais linhas são diferentes.
Parece uma dor. Boa sorte!
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 converti para um software comercial e publiquei em
www.sql-server-tool.com
O programa - chamado SCT para "SQL Server Comparison Tool" (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 reinserir os parâmetros. O parâmetro de 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 menor de dados - digamos comparar apenas as primeiras 1.000 linhas - e ver se é necessário algum ajuste fino do processo.
Dariusz Dziewialtowski-Gintowt