Dữ liệu lớn đến mức nào và các liên kết giữa cơ sở dữ liệu với nhau (và bạn) nhanh như thế nào? Có một số ý tưởng:
Nếu dữ liệu đủ nhỏ để thực tế, hãy chạy SELECT * FROM <table> ORDER BY <pk>
trên mỗi DB, lưu kết quả vào một tab hoặc tệp được phân tách bằng dấu phẩy (không được căn chỉnh theo chiều rộng để làm tăng kích thước tệp kết quả một cách ồ ạt) và so sánh kết quả đầu ra với loại khác biệt ưa thích của bạn tiện ích như winmerge. Bằng cách đó, bạn đang so sánh hoàn toàn tất cả các dữ liệu.
Nếu các cơ sở dữ liệu có thể nhìn thấy nhau (rất có thể vì chúng có thể hoạt động như các đối tác sao chép) và liên kết giữa chúng là băng thông đủ cao và độ trễ đủ thấp, bạn có thể sử dụng chức năng máy chủ được liên kết (xem http://msdn.microsoft .com / en-us / library / ms190479.aspx và tài liệu liên quan) để so sánh so sánh nội dung của các bảng trong một vài câu lệnh SQL (liệt kê các hàng trong <table>
đó không có hàng giống hệt nhau <linked_server>.<db>..<table>
và ngược lại) giống như bạn sẽ so sánh nội dung của hai bảng cục bộ. Đây là một tùy chọn tương đối chậm có khả năng, nhưng có thể là một kiểm tra khá mạnh mẽ để tự động hóa.
Nếu bạn đang cần sử dụng tổng kiểm tra vì bạn muốn giảm đáng kể lượng dữ liệu cần truyền, hãy sử dụng HASHBYTES
thay vì nhóm CHECKSUM
chức năng vì bạn có thể sử dụng hàm băm chất lượng tốt hơn để bạn yên tâm hơn khi chúng ra bằng nhau. Điều này đòi hỏi nhiều CPU hơn, nhưng với lượng dữ liệu lớn, bạn sẽ bị ràng buộc I / O chứ không phải CPU bị ràng buộc vì vậy sẽ có nhiều chu kỳ dự phòng (và với số lượng nhỏ đơn giản là không thành vấn đề).
Là cơ sở giữa việc so sánh tất cả các ký tự dữ liệu và so sánh một tổng kiểm tra bao gồm tất cả dữ liệu, bạn có thể xuất SELECT <pk>, HASHBYTES('SHA1', <all-other-fields-concatenated>) ORDER BY <pk>
từ mỗi cơ sở dữ liệu và so sánh các kết quả đó để xem liệu chúng có giống nhau không (hoặc SELECT HASHBYTES('SHA1', <all-other-fields-concatenated>) ORDER BY <pk>
để giảm lượng dữ liệu chảy, nhưng có PK trong đầu ra sẽ có nghĩa là bạn có thể xác định các hàng khác nhau, nếu có, với ít truy vấn hơn). Tất nhiên tùy chọn cuối cùng này là vô nghĩa nếu dữ liệu trong hàng trung bình nhỏ hơn hàm băm kết quả, trong trường hợp đó, tùy chọn "so sánh mọi thứ " sẽ hiệu quả hơn.