ข้อมูลมีขนาดใหญ่เพียงใดและการเชื่อมโยงระหว่างฐานข้อมูลและความเร็ว (และคุณ) มีความรวดเร็วเพียงใด มีแนวคิดหลายประการ:
หากข้อมูลมีขนาดเล็กพอที่จะใช้งานได้จริงให้เรียกใช้SELECT * FROM <table> ORDER BY <pk>
บนแต่ละฐานข้อมูลบันทึกผลลัพธ์ลงในแท็บหรือไฟล์ที่คั่นด้วยจุลภาค (ไม่เว้นระยะชิดกันเนื่องจากขนาดของไฟล์ที่เกิดขึ้นมีขนาดใหญ่มาก) และเปรียบเทียบผลลัพธ์ที่ได้ โปรแกรมอรรถประโยชน์เช่น winmerge วิธีการที่คุณกำลังเปรียบเทียบอย่างทุกข้อมูล
ถ้าฐานข้อมูลสามารถมองเห็นกันและกัน (ส่วนใหญ่น่าจะเป็นพวกเขามีความสามารถที่จะทำงานเป็นคู่การจำลอง) และเชื่อมโยงระหว่างพวกเขาอยู่ในระดับสูงพอและแบนด์วิดธ์ latency ต่ำพอที่คุณสามารถใช้ฟังก์ชั่นเซิร์ฟเวอร์ที่เชื่อมโยง (ดูhttp://msdn.microsoft .com / en-us / library / ms190479.aspxและเอกสารที่เกี่ยวข้อง) เพื่อเปรียบเทียบเนื้อหาของตารางในคำสั่ง SQL สองรายการ (แสดงรายการแถวใน<table>
ที่ไม่มีแถวที่เหมือนกัน<linked_server>.<db>..<table>
และในทางกลับกัน) เช่นเดียวกับ คุณจะเปรียบเทียบเนื้อหาของสองตารางท้องถิ่น นี่เป็นตัวเลือกที่ค่อนข้างช้า แต่อาจเป็นการตรวจสอบที่ทรงพลังในการทำให้เป็นอัตโนมัติ
หากคุณต้องการใช้ checksums เพราะคุณต้องการลดจำนวนข้อมูลที่ต้องโอนให้ใช้HASHBYTES
มากกว่าCHECKSUM
ฟังก์ชั่นตระกูลเนื่องจากคุณสามารถใช้แฮชที่มีคุณภาพดีกว่าเพื่อให้คุณมั่นใจได้ว่ามันจะออกมาเท่ากัน นี่เป็น CPU ที่มีความเข้มข้นมากกว่า แต่สำหรับข้อมูลจำนวนมากคุณจะถูกผูกไว้กับ I / O ไม่ใช่ CPU ที่ถูกผูกไว้ดังนั้นจะมีวงจรสำรองมากมาย (และสำหรับจำนวนเล็กน้อยก็ไม่สำคัญ)
ในฐานะที่เป็นสื่อกลางระหว่างการเปรียบเทียบข้อมูลอักขระสำหรับอักขระและการเปรียบเทียบเช็คซัมเดียวที่ครอบคลุมข้อมูลทั้งหมดคุณสามารถส่งออกSELECT <pk>, HASHBYTES('SHA1', <all-other-fields-concatenated>) ORDER BY <pk>
จากแต่ละฐานข้อมูลและเปรียบเทียบผลลัพธ์เหล่านั้นเพื่อดูว่าพวกเขาเหมือนกันหรือไม่หรือSELECT HASHBYTES('SHA1', <all-other-fields-concatenated>) ORDER BY <pk>
ลดปริมาณข้อมูล โฟลว์ แต่การมี PK ในเอาต์พุตจะหมายความว่าคุณสามารถระบุแถวที่แตกต่างกันถ้ามีให้ทำพร้อมกับเคียวรีเพิ่มเติมที่น้อยลง) แน่นอนว่าตัวเลือกสุดท้ายนี้ไม่มีจุดหมายหากข้อมูลในแถวเฉลี่ยมีขนาดเล็กกว่าแฮชที่ได้ซึ่งในกรณีนี้ตัวเลือก"เปรียบเทียบทุกอย่าง " จะมีประสิทธิภาพมากขึ้น