Quelle est la taille des données et à quelle vitesse les liens entre les bases de données et entre eux (et vous)? Il y a plusieurs idées:
Si les données sont suffisamment petites pour que cela soit pratique, exécutez SELECT * FROM <table> ORDER BY <pk>
sur chaque base de données, enregistrez les résultats dans un fichier délimité par des tabulations ou des virgules (pas aligné sur l'espace car cela fait exploser massivement la taille du fichier résultant) et comparez la sortie résultante avec votre type de différence préféré utilitaire tel que winmerge. De cette façon, vous comparez absolument toutes les données.
Si les bases de données peuvent se voir (très probablement car elles sont capables de fonctionner en tant que partenaires de réplication) et que le lien entre elles est une bande passante suffisamment élevée et une latence suffisamment faible, vous pouvez utiliser la fonctionnalité de serveur lié (voir http://msdn.microsoft .com / en-us / library / ms190479.aspx et documentation connexe) pour comparer et comparer le contenu des tables dans quelques instructions SQL (répertoriant les lignes <table>
qui n'ont pas de lignes identiques dans <linked_server>.<db>..<table>
et vice versa) tout comme vous compareriez le contenu de deux tables locales. Il s'agit potentiellement d'une option relativement lente, mais cela pourrait être une vérification assez puissante à automatiser.
Si vous devez utiliser des sommes de contrôle parce que vous souhaitez réduire considérablement la quantité de données à transférer, utilisez HASHBYTES
plutôt que la CHECKSUM
famille de fonctions, car vous pouvez utiliser des hachages de meilleure qualité afin d'être plus sûrs qu'ils sortent égaux. Ceci est plus gourmand en CPU, mais pour de grandes quantités de données, vous serez lié aux E / S et non lié au CPU de toute façon, de nombreux cycles seront donc disponibles (et pour de petites quantités, cela n'a tout simplement pas d'importance).
En tant qu'intermédiaire entre la comparaison de toutes les données caractère par caractère et la comparaison d'une seule somme de contrôle couvrant toutes les données, vous pouvez exporter à SELECT <pk>, HASHBYTES('SHA1', <all-other-fields-concatenated>) ORDER BY <pk>
partir de chaque base de données et comparer ces résultats pour voir s'ils sont identiques (ou SELECT HASHBYTES('SHA1', <all-other-fields-concatenated>) ORDER BY <pk>
pour réduire la quantité de données coulant, mais ayant le PK dans la sortie signifie que vous pouvez identifier les lignes qui diffèrent, le cas échéant, avec moins de requêtes supplémentaires). Bien sûr, cette dernière option est inutile si les données de la ligne moyenne sont plus petites que le hachage résultant, auquel cas l' option " tout comparer " sera plus efficace.