web-dev-qa-db-fra.com

Existe-t-il des outils pour effectuer une comparaison de données entre deux schémas différents?

Nous migrons notre base de données vers un nouveau schéma, mais nous souhaitons valider que les données ont été déplacées correctement.

Les outils de comparaison de données traditionnels peuvent comparer deux bases de données pour différences si les schémas sont les mêmes. Dans notre cas, il y a eu des modifications apportées aux conceptions de la table, mais toutes les données de l'ancien schéma se trouvent dans le nouveau, il vient d'être déplacé un peu et je dois m'assurer qu'il est correct. Nous avons des dizaines de millions de lignes afin que l'inspection manuelle n'est pas une option.

Existe-t-il des outils pouvant aider dans ce type de comparaison?

Sinon, y a-t-il des bibliothèques/cadres qui pourraient aider à frapper le développement d'une solution personnalisée?

Je suis heureux d'utiliser une solution spécifique à la base de données si nécessaire, dans ce cas pour SQL Server 2008.

Mon Soluton: Je compare les deux ensembles de données en créant un VIEW de chaque table sur l'ancienne base de données avec les mêmes champs que la nouvelle table de base de données.

Je comparais ensuite les données à l'aide de la technique décrite ici: le moyen le plus court, le plus rapide et le plus simple de comparer deux tables dans SQL Server: Union!

J'ai de la chance dans cette migration car la structure de table globale est similaire à celle de l'ancienne base de données, les champs déplacés d'une table à une autre, déposés ou ajoutés. Dans le cas de la chute et de l'addition, il n'y a rien à comparer, pour les champs qui ont déplacé ou ont été agrégés, je fais des calculs dans la vue pour fournir les informations correctes à la comparaison.

La comparaison UNION montre que les lignes avec des différences, de sorte que les données sont correctes, je reçois un ensemble de résultats vide.

11
Tony

Si vous souhaitez comparer des données dans deux conceptions de base de données différentes, vous devez écrire SQL codé à la main pour comparer les données.

  • Et si une table a été scindée ou combinée, etc.?
  • Et si vous aviez DateTime, vous avez maintenant des petites données = des données seront différentes
  • ...

Il n'y a pas de bibliothèque de framework pour la vérification des données est la même dans deux bases de données disparates.

Seulement vous savez ce que vous aviez changé ou modifié

6
gbn

Il vous sera impossible de comparer différents schemas. Pour résoudre votre problème, je comprendrais les données que vous devez comparer. Je créerais ensuite une vue sur chaque serveur qui retirerait les données que je voulais comparer (prendre en compte les types de données et telle).

Une fois que les deux vues sont identiques, j'utiliserais un outil tiers comme Data Red Gate Comparer pour voir quelles lignes sont différentes.

Cela ressemble à une douleur. Bonne chance!

5
SqlSandwiches

Il y a quelques années, j'ai écrit un outil pour faire juste que - une comparaison de données entre deux bases de données. Depuis lors, je l'ai converti sur un logiciel commercial et publié à

www.sql-server-tool.com

  • une licence unique coûte 99 $, mais vous pouvez l'essayer gratuitement pendant 30 jours.

Le programme - nommé SCT pour "L'outil de comparaison SQL Server" (je n'ai jamais été bon à nommer des choses :) - a beaucoup d'options de réglage fin, telles que: ignorer des colonnes sélectionnées ou spécifier la méthode de comparaison (enregistrement par enregistrement ou clé primaire/comparaison index). Les "sessions" de comparaison peuvent être enregistrées et ré-lues plus tard sans avoir besoin de rentrer dans les paramètres. Le paramètre de ligne de commande peut être utilisé pour automatiser entièrement les comparaisons.

Pour des dizaines de millions de lignes, il peut être un peu lent - dans ce cas, je recommanderais de commencer par un sous-ensemble de données plus petit - disons comparer uniquement 1 000 lignes - et voir si une réglage précis du processus est nécessaire.

Dariusz Dziewialtowski-Gintowt