Jak duże są dane i jak szybkie są połączenia między bazami danych między sobą (a tobą)? Istnieje wiele pomysłów:
Jeśli dane są na tyle małe, że jest to praktyczne, uruchom SELECT * FROM <table> ORDER BY <pk>
każdą bazę danych, zapisz wyniki w pliku rozdzielanym tabulatorami lub przecinkami (nie wyrównane spacją, ponieważ powoduje to znaczny wzrost rozmiaru pliku wynikowego) i porównaj uzyskane wyniki z preferowanym typem pliku różnicowego narzędzie takie jak winmerge. W ten sposób porównujesz absolutnie wszystkie dane.
Jeśli bazy danych mogą się widzieć (najprawdopodobniej ponieważ są w stanie działać jako partnerzy replikacji), a połączenie między nimi ma wystarczającą przepustowość i wystarczająco małe opóźnienie, można użyć funkcji serwera połączonego (patrz http://msdn.microsoft .com / en-us / library / ms190479.aspx i powiązana dokumentacja) i porównaj, porównaj zawartość tabel w kilku instrukcjach SQL (wymieniając wiersze, w <table>
których nie ma identycznych wierszy <linked_server>.<db>..<table>
i odwrotnie) tak jak porównałbyś zawartość dwóch lokalnych tabel. Jest to potencjalnie stosunkowo wolna opcja, ale może być dość zaawansowanym narzędziem do automatyzacji.
Jeśli chcesz użyć sum kontrolnych, ponieważ chcesz znacznie zmniejszyć ilość danych, które muszą zostać przesłane, użyj HASHBYTES
raczej niż CHECKSUM
rodziny funkcji, ponieważ możesz używać skrótów lepszej jakości , aby mieć pewność, że będą one równe. Jest to bardziej obciążające procesor, ale w przypadku dużych ilości danych będziesz związany z procesorem we / wy, a nie z procesorem, więc będziesz mieć wiele wolnych cykli (a dla małych ilości po prostu nie będzie to miało znaczenia).
Jako środek pośredni między porównaniem wszystkich danych znak po znaku a porównaniem pojedynczej sumy kontrolnej obejmującej wszystkie dane, możesz wyeksportować SELECT <pk>, HASHBYTES('SHA1', <all-other-fields-concatenated>) ORDER BY <pk>
z każdej bazy danych i porównać te wyniki, aby sprawdzić, czy są one identyczne (lub SELECT HASHBYTES('SHA1', <all-other-fields-concatenated>) ORDER BY <pk>
aby zmniejszyć ilość danych przepływające, ale posiadanie PK na wyjściu oznacza, że możesz zidentyfikować wiersze, które różnią się, jeśli w ogóle, z mniejszymi zapytaniami). Oczywiście ta ostatnia opcja nie ma sensu, jeśli dane w średnim wierszu są mniejsze niż wynikowy skrót, w którym to przypadku opcja „porównaj wszystko ” będzie bardziej wydajna.