データの大きさとデータベースと相互(そしてあなた)との間のリンクの速度はどれくらいですか?いくつかのアイデアがあります:
これが実用的であるほどデータが小さい場合は、SELECT * FROM <table> ORDER BY <pk>
各DB で実行し、結果をタブまたはカンマ区切りのファイルに保存し(結果のファイルサイズが大幅に増大するため、スペースを揃えないで)、結果の出力を優先するdiffタイプと比較します。 winmergeなどのユーティリティ。そうすれば、すべてのデータを完全に比較できます。
データベースが相互に認識でき(ほとんどの場合、それらは複製パートナーとして動作できるため)、それらの間のリンクが十分に高い帯域幅と十分に低い待ち時間である場合、リンクサーバー機能を使用できます(http://msdn.microsoftを参照) .com / en-us / library / ms190479.aspxと関連ドキュメント)を比較して、いくつかのSQLステートメントのテーブルの内容を比較します(<table>
同じ行が含まれていない行を一覧表示します<linked_server>.<db>..<table>
)。 2つのローカルテーブルの内容を比較します。これは潜在的に比較的遅いオプションですが、自動化するには非常に強力なチェックになる可能性があります。
転送する必要のあるデータの量を大幅に削減したいためにチェックサムを使用する必要がある場合は、より良い品質のハッシュを使用できるため、関数HASHBYTES
のCHECKSUM
ファミリーではなく使用してください。これはより多くのCPUを消費しますが、大量のデータの場合はCPUにバインドされずにI / Oバインドされるため、多くのサイクルがスペアになります(そして、少量の場合は問題になりません)。
すべてのデータを文字SELECT <pk>, HASHBYTES('SHA1', <all-other-fields-concatenated>) ORDER BY <pk>
ごとに比較することと、すべてのデータをカバーする単一のチェックサムを比較することの中間として、各データベースからエクスポートし、それらの結果を比較して、それらが同一であるかどうかを確認できます(またはSELECT HASHBYTES('SHA1', <all-other-fields-concatenated>) ORDER BY <pk>
データ量を減らすことができます)フローするが、出力にPKがある場合は、さらにクエリを減らすことで、異なる行があれば、それを特定できることを意味します。もちろん、この最後のオプションは、平均行のデータが結果のハッシュよりも小さい場合は無意味です。その場合、「すべて比較」オプションの方が効率的です。