Gibt es Tools zum Durchführen eines Datenvergleichs zwischen zwei verschiedenen Schemas?


11

Wir migrieren unsere Datenbank in ein neues Schema, möchten jedoch überprüfen, ob die Daten korrekt verschoben wurden.

Herkömmliche Datenvergleichstools können zwei Datenbanken auf Unterschiede vergleichen, wenn die Schemas identisch sind. In unserem Fall wurden Änderungen an den Tabellenentwürfen vorgenommen, aber alle Daten aus dem alten Schema befinden sich im neuen, sie wurden nur ein wenig verschoben, und ich muss sicherstellen, dass sie korrekt sind. Wir haben zig Millionen Zeilen, daher ist eine manuelle Inspektion keine Option.

Gibt es Werkzeuge, die bei dieser Art von Vergleich hilfreich sein könnten?

Wenn nicht, gibt es Bibliotheken / Frameworks, die dazu beitragen könnten, die Entwicklung einer benutzerdefinierten Lösung voranzutreiben?

Gerne verwende ich bei Bedarf eine datenbankspezifische Lösung, in diesem Fall für SQL Server 2008.

Meine Lösung: Ich vergleiche die beiden Datensätze, indem ich VIEWfür jede Tabelle in der alten Datenbank eine mit denselben Feldern wie in der neuen Datenbanktabelle erstelle .

Ich vergleiche dann die Daten mit der hier beschriebenen Technik: Der kürzeste, schnellste und einfachste Weg, zwei Tabellen in SQL Server zu vergleichen: UNION!

Ich habe Glück bei dieser Migration, da die gesamte Tabellenstruktur der alten Datenbank ähnelt und Felder von einer Tabelle in eine andere verschoben, gelöscht oder hinzugefügt werden. Im Fall des Löschens und Hinzufügens gibt es nichts zu vergleichen. Für die Felder, die verschoben oder aggregiert wurden, führe ich Berechnungen in der Ansicht durch, um die richtigen Informationen zum Vergleich bereitzustellen.

Der UNIONVergleich zeigt mir nur die Zeilen mit Unterschieden. Sobald die Daten korrekt sind, erhalte ich eine leere Ergebnismenge.


1
Woher wissen Sie, dass Daten korrekt sind, wenn sich Schemas geändert haben? Was ist, wenn eine Tabelle geteilt oder kombiniert wurde?
Gbn


@AaronBertrand - Vielen Dank für Ihren Kommentar, aber zu der Zeit (vor 3 Jahren) habe ich die Verfügbarkeit von Tools dafür untersucht, aber keine gefunden, die einen Vergleich zwischen verschiedenen Schemata durchführen würden. Ich hatte gehofft, Ihr Link war zu einem Tool, das ich kaufen konnte, da ich noch eines brauche.
Tony

@ Tony Sie können das sicherlich mit dem Red-Gate-Tool tun (bei keinem der anderen sicher), Sie müssen nur einige manuelle Zuordnungen vornehmen.
Aaron Bertrand

@ Tony Verschiedene Schemata, gleiche Datenbank? Oder verschiedene Schemata, verschiedene Datenbanken?
Aaron Bertrand

Antworten:


7

Es ist nicht unmöglich, zwei verschiedene Schemata zu vergleichen. Es ist eine Berechnung, wie sicher Sie im Ergebnis sind. Ich habe im Wesentlichen von Bank Reconciliation Techniken geliehen

Wichtig: Bei dieser Abstimmung geht es nicht darum, sicherzustellen, dass das Ziel genau mit der Quelle im Datenkontext übereinstimmt (es gibt einen Grund, warum Sie auf ein neues System migrieren), sondern Sie müssen etwaige Unstimmigkeiten erklären!

Basis:

  1. Identifizieren Sie Metriken, die Sie zum Messen verwenden werden (dh Gesamtzahl der Benutzer, Summe ihres Alters, Liste der Benutzer-IDs und ihrer Postleitzahlen ...). Ich versuche, verschiedene Metriken zu verwenden aus: Summen, Durchschnittswerte und Stichproben / detaillierte Datensätze
  2. Speichern Sie diese Daten an einem gemeinsamen Ort (über Ansichten / Berichte / was auch immer angemessen ist).
  3. Vergleichen Sie Ihre Daten und stellen Sie sicher, dass etwaige Unstimmigkeiten erklärt werden können

Ich habe den Vergleich im Allgemeinen in mehrere Methoden aufgeteilt (insbesondere für die detaillierten Metriken):

  • Nach Tabelle: Verwenden Sie normalerweise die Quelltabelle als Definition und erstellen Sie eine Reihe von Ansichten in der Zieldatenbank, um zu versuchen, die Quellentabellendaten zu reproduzieren
  • Nach Objekt: Abhängig von der Datenbank und dem, was Sie speichern, ist es möglicherweise sinnvoller, eine ganzheitliche Ansicht der Objekte (dh des Benutzers) über mehrere Tabellen hinweg zu erstellen, ähnlich wie oben, indem Sie eine Reihe von Ansichten erstellen, um dieses Objekt als zurückzugeben Reihe von Ergebnissen
  • Nach Berichten: Wenn die Quelldatenbank über einen guten umfassenden Satz von Verwaltungsberichten verfügt, besteht eine andere Technik darin, diese Berichte mit genau derselben Formatierung zu reproduzieren

Techniken:

Unabhängig davon, mit welcher Methode ich erstellt habe, was verglichen werden soll, erhalte ich eine Reihe von Dateien / Ansichten / Datenbank, die die abgleichbaren Quell- und Zieldaten enthalten. Je nach Medium kann ich dann eines der allgemein verfügbaren Tools verwenden um sie zu vergleichen. Meine eigenen Vorlieben sind:

  1. Dateivergleich
    Erstellen Sie zwei verschiedene Ordner für SourceDB und DestinationDB (Zeit- / Versionsstempel, damit ich weiß, wann ich die Abstimmung durchgeführt habe) und geben Sie die Ausgabe meiner Metriken als relevant benannte Dateien aus. Verwenden Sie dann ein Vergleichstool (z. B. CSDiff ), um Unterschiede zu identifizieren

  2. Excel-Vergleich
    Insbesondere beim Umgang mit Managementberichten werde ich eine Reihe von Excel-Arbeitsmappen erstellen, um die Berichte zu vergleichen (im Wesentlichen VLookups verwenden und Summen vergleichen).

  3. Datenvergleich
    Anstatt die Abstimmungsdaten in Dateien oder Berichte auszugeben, geben Sie sie in separate DBs aus und vergleichen Sie die DBs mit Redgate SQL Data Compare

Andere Werkzeuge:

Keine dieser Methoden ausprobiert, aber eine schnelle Google-Suche nach "Datenabgleichstools" bietet:

Es gibt andere, aber diese sahen vernünftig aus


Danke für die Vorschläge. Wie Sie sagen, es ist nicht unmöglich (ich arbeite gerade an einer Lösung), es ist nur schwierig. Ich werde mir die Methoden ansehen, die Sie erwähnen.
Tony

Keine Sorge @Tony, der Trick, den ich gefunden habe, besteht darin, ihn in kleinere Schritte zu unterteilen und dann vorhandene Tools für jeden Schritt zu finden (Sie müssen einige benutzerdefinierte Dinge schreiben, es geht nur darum, diesen Aufwand zu minimieren, wo dies möglich ist)
Andrew Bickerton

6

Wenn Sie Daten in zwei verschiedenen Datenbankdesigns vergleichen möchten, müssen Sie handcodiertes SQL schreiben, um Daten zu vergleichen.

  • Was ist, wenn eine Tabelle geteilt oder kombiniert wurde?
  • Was wäre, wenn Sie datetime hätten, jetzt haben Sie smalldatetime = Daten werden anders sein
  • ...

Es gibt keine Framework-Bibliothek zum Überprüfen von Daten, die in zwei unterschiedlichen Datenbanken identisch sind.

Nur Sie wissen, was Sie geändert oder modifiziert haben


Ich fürchtete das genauso, dachte aber, ich würde fragen, ob jemand einen solchen Vergleich gemacht hätte. Ich hoffte, dass es ein Tool geben könnte, um das Schreiben von Abfragen zu beschleunigen, aber wie Sie sagen, muss ich wahrscheinlich etwas von Grund auf neu schreiben.
Tony

1
@ Tony: yep: Es ist, weil kein Tool "was falsch ist" von "was wir geändert haben"
trennen kann

5

Es wird Ihnen unmöglich sein, verschiedene Schemata zu vergleichen. Um Ihr Problem zu lösen, würde ich herausfinden, welche Daten Sie vergleichen müssen. Ich würde dann auf jedem Server eine Ansicht erstellen, die die Daten zurückzieht, die ich vergleichen wollte (unter Berücksichtigung von Datentypen und dergleichen).

Sobald beide Ansichten identisch sind, würde ich ein Drittanbieter-Tool wie Red Gate Data Compare verwenden , um festzustellen , welche Zeilen unterschiedlich sind.

Klingt nach Schmerz. Viel Glück!


1
Sie sagen, es ist unmöglich und bieten dann eine mögliche Lösung :) Tatsächlich ähnelt die Methode, an der ich gearbeitet habe, Ihrem Vorschlag, außer dass ich das Ergebnis nicht mit einem externen Tool vergleiche, sondern alles in SQL mache. Vielen Dank.
Tony

2

Vor ein paar Jahren habe ich ein Tool dafür geschrieben - einen Datenvergleich zwischen zwei Datenbanken. Seitdem habe ich es in eine kommerzielle Software umgewandelt und bei veröffentlicht

www.sql-server-tool.com

  • Eine Einzellizenz kostet 99 $, aber Sie können sie 30 Tage lang kostenlos testen.

Das Programm - SCT für "SQL Server Comparison Tool" genannt (ich war nie gut darin, Dinge zu benennen :) - bietet viele Feinabstimmungsoptionen, z. B.: Ausgewählte Spalten ignorieren oder Vergleichsmethode angeben (Datensatz für Datensatz oder Primärschlüssel / Indexvergleich). Vergleichssitzungen können gespeichert und später erneut abgespielt werden, ohne dass die Parameter erneut eingegeben werden müssen. Befehlszeilenparameter können verwendet werden, um Vergleiche vollständig zu automatisieren.

Für zig Millionen Zeilen kann es etwas langsam sein - in diesem Fall würde ich empfehlen, mit einer kleineren Teilmenge von Daten zu beginnen - sagen wir, vergleichen Sie nur die ersten 1.000 Zeilen - und prüfen Sie, ob eine Feinabstimmung des Prozesses erforderlich ist.

Dariusz Dziewialtowski-Gintowt


Vielen Dank, dass Sie Ihre App empfohlen haben. Ich habe sie ausprobiert, aber sie vergleicht nicht verschiedene Schemata. Genau das muss ich tun. Beim Abrufen der Daten aus der ersten Tabelle ist ein Fehler aufgetreten. Ich bin mir auch nicht sicher, ob die App mit der Datenmenge umgehen kann, die ich habe, da es anscheinend keine Möglichkeit gibt, die Anzahl der verglichenen Zeilen zu begrenzen. Die Tabelle, an der ich es getestet habe, enthält 99 Millionen Zeilen.
Tony
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.