Seberapa besar data dan seberapa cepat tautan antara database dan satu sama lain (dan Anda)? Ada sejumlah ide:
Jika data cukup kecil sehingga praktis, jalankan SELECT * FROM <table> ORDER BY <pk>
pada setiap DB, simpan hasilnya ke tab atau file yang dibatasi koma (tidak sejajar dengan ruang yang menghasilkan ukuran file yang dihasilkan secara besar-besaran) dan bandingkan output yang dihasilkan dengan tipe diff yang Anda inginkan utilitas seperti winmerge. Dengan begitu Anda benar - benar membandingkan semua data.
Jika basis data dapat saling melihat (kemungkinan besar karena mereka dapat beroperasi sebagai mitra replikasi) dan tautan di antara mereka adalah bandwidth yang cukup tinggi dan latensi yang cukup rendah, Anda dapat menggunakan fungsionalitas server tertaut (lihat http://msdn.microsoft .com / en-us / library / ms190479.aspx dan dokumentasi terkait) untuk dan membandingkan membandingkan isi tabel dalam beberapa pernyataan SQL (daftar baris <table>
yang tidak memiliki baris identik <linked_server>.<db>..<table>
dan sebaliknya) sama seperti Anda akan membandingkan konten dua tabel lokal. Ini adalah opsi yang relatif lambat, tetapi bisa menjadi pemeriksaan yang cukup kuat untuk mengotomatisasi.
Jika Anda perlu menggunakan checksum karena Anda ingin sangat mengurangi jumlah data yang perlu ditransfer, gunakan HASHBYTES
alih-alih CHECKSUM
keluarga fungsi karena Anda dapat menggunakan hash berkualitas lebih baik sehingga Anda lebih yakin dengan mereka yang keluar sama. Ini lebih intensif CPU, tetapi untuk sejumlah besar data Anda akan I / O terikat bukan CPU terikat sehingga akan memiliki banyak siklus cadangan (dan untuk jumlah kecil sama sekali tidak masalah).
Sebagai jalan tengah antara membandingkan semua data karakter-untuk-karakter dan membandingkan satu checksum yang mencakup semua data, Anda dapat mengekspor SELECT <pk>, HASHBYTES('SHA1', <all-other-fields-concatenated>) ORDER BY <pk>
dari setiap database dan membandingkan hasil-hasil tersebut untuk melihat apakah mereka identik (atau SELECT HASHBYTES('SHA1', <all-other-fields-concatenated>) ORDER BY <pk>
untuk mengurangi jumlah data) mengalir, tetapi memiliki PK dalam output akan berarti Anda dapat mengidentifikasi baris yang berbeda, jika ada, dengan lebih sedikit pertanyaan lebih lanjut). Tentu saja opsi terakhir ini tidak ada gunanya jika data di baris rata-rata lebih kecil dari hash yang dihasilkan, dalam hal ini opsi "bandingkan semuanya " akan lebih efisien.