Qual é o tamanho dos dados e a rapidez com que os links entre os bancos de dados e entre si (e você)? Há várias idéias:
Se os dados forem pequenos o suficiente para serem práticos, execute SELECT * FROM <table> ORDER BY <pk>
em cada banco de dados, salve os resultados em um arquivo delimitado por vírgula ou tabulação (sem espaço alinhado, pois isso aumenta o tamanho do arquivo resultante maciçamente) e compare a saída resultante com o tipo de diff preferido utilitário como o winmerge. Dessa forma, você está comparando absolutamente todos os dados.
Se os bancos de dados puderem se ver (provavelmente como eles podem operar como parceiros de replicação) e o link entre eles tiver largura de banda alta o suficiente e latência baixa o suficiente, você poderá usar a funcionalidade do servidor vinculado (consulte http://msdn.microsoft .com / pt-br / library / ms190479.aspx e documentação relacionada) e compara o conteúdo das tabelas em algumas instruções SQL (listando as linhas <table>
que não possuem linhas idênticas <linked_server>.<db>..<table>
e vice-versa), assim como você compararia o conteúdo de duas tabelas locais. Esta é uma opção relativamente lenta, mas pode ser uma verificação bastante poderosa para automatizar.
Se você estiver precisando usar somas de verificação porque deseja reduzir bastante a quantidade de dados que precisam ser transferidos, use HASHBYTES
em vez da CHECKSUM
família de funções, pois você pode usar hashes de melhor qualidade para ter mais certeza de que serão iguais. Isso consome mais CPU, mas para grandes quantidades de dados, você estará ligado à E / S e não à CPU, de modo que haverá muitos ciclos de reserva (e para pequenas quantidades simplesmente não importa).
Como um meio termo entre comparar todos os dados caractere por caractere e comparar uma única soma de verificação que abrange todos os dados, você pode exportar SELECT <pk>, HASHBYTES('SHA1', <all-other-fields-concatenated>) ORDER BY <pk>
de cada banco de dados e comparar esses resultados para ver se eles são idênticos (ou SELECT HASHBYTES('SHA1', <all-other-fields-concatenated>) ORDER BY <pk>
para reduzir a quantidade de dados fluindo, mas ter a PK na saída significa que você pode identificar as linhas que diferem, se houver, com menos consultas adicionais). Obviamente, essa última opção não faz sentido se os dados na linha média forem menores que o hash resultante; nesse caso, a opção "comparar tudo " será mais eficiente.