Wie groß sind die Daten und wie schnell sind die Verbindungen zwischen den Datenbanken und untereinander (und Ihnen)? Es gibt eine Reihe von Ideen:
Wenn die Daten so klein sind, dass dies praktisch ist, führen Sie sie SELECT * FROM <table> ORDER BY <pk>
in jeder Datenbank aus , speichern Sie die Ergebnisse in einer durch Tabulatoren oder Kommas getrennten Datei (nicht durch Leerzeichen ausgerichtet, da dies die resultierende Dateigröße massiv vergrößert) und vergleichen Sie die resultierende Ausgabe mit Ihrem bevorzugten Diff-Typ Dienstprogramm wie Winmerge. Auf diese Weise vergleichen Sie absolut alle Daten.
Wenn sich die Datenbanken sehen können (höchstwahrscheinlich, weil sie als Replikationspartner fungieren können) und die Verbindung zwischen ihnen eine ausreichend hohe Bandbreite und eine ausreichend niedrige Latenz aufweist, können Sie die Verbindungsserverfunktionalität verwenden (siehe http://msdn.microsoft) .com / de-de / library / ms190479.aspx und zugehörige Dokumentation) zum Vergleichen des Inhalts der Tabellen in einigen SQL-Anweisungen (Auflisten der Zeilen, in <table>
denen keine identischen Zeilen enthalten sind, <linked_server>.<db>..<table>
und umgekehrt) Sie würden den Inhalt von zwei lokalen Tabellen vergleichen. Dies ist möglicherweise eine relativ langsame Option, könnte jedoch eine recht leistungsstarke Prüfung zur Automatisierung sein.
Wenn Sie Prüfsummen verwenden müssen, weil Sie die zu übertragende Datenmenge erheblich reduzieren möchten, verwenden Sie HASHBYTES
anstelle CHECKSUM
der Funktionsfamilie Hashs mit besserer Qualität, damit Sie sicherer sind, dass sie gleich sind. Dies ist CPU-intensiver, aber für große Datenmengen sind Sie E / A-gebunden und ohnehin nicht CPU-gebunden, sodass viele Zyklen frei bleiben (und für kleine Mengen spielt das einfach keine Rolle).
Als Mittelweg zwischen dem Vergleich aller Daten Zeichen für Zeichen und dem Vergleich einer einzelnen Prüfsumme, die alle Daten abdeckt, können Sie SELECT <pk>, HASHBYTES('SHA1', <all-other-fields-concatenated>) ORDER BY <pk>
aus jeder Datenbank exportieren und diese Ergebnisse vergleichen, um festzustellen, ob sie identisch sind (oder SELECT HASHBYTES('SHA1', <all-other-fields-concatenated>) ORDER BY <pk>
um die Datenmenge zu verringern) fließend, aber wenn die PK in der Ausgabe enthalten ist, können Sie die Zeilen, die sich gegebenenfalls unterscheiden, mit weniger weiteren Abfragen identifizieren. Natürlich ist diese letzte Option sinnlos, wenn die Daten in der durchschnittlichen Zeile kleiner als der resultierende Hash sind. In diesem Fall ist die Option " Alles vergleichen " effizienter.