มีเครื่องมือในการทำการเปรียบเทียบข้อมูลระหว่างสอง schema ที่แตกต่างกันหรือไม่?


11

เรากำลังย้ายฐานข้อมูลของเราไปยังสคีมาใหม่ แต่ต้องการตรวจสอบความถูกต้องของข้อมูลว่าถูกย้ายอย่างถูกต้องแล้ว

เครื่องมือเปรียบเทียบข้อมูลแบบดั้งเดิมสามารถเปรียบเทียบสองฐานข้อมูลสำหรับความแตกต่างหากสกีมาเหมือนกัน ในกรณีของเรามีการเปลี่ยนแปลงการออกแบบตาราง แต่ข้อมูลทั้งหมดจาก schema เก่าอยู่ในใหม่มันเพิ่งถูกย้ายไปรอบ ๆ และฉันต้องแน่ใจว่าถูกต้อง เรามีหลายสิบล้านแถวเพื่อให้การตรวจสอบด้วยตนเองไม่ใช่ตัวเลือก

มีเครื่องมือใดบ้างที่สามารถช่วยในการเปรียบเทียบประเภทนี้?

ถ้าไม่มีไลบรารี่ / กรอบงานใดบ้างที่สามารถช่วยเริ่มต้นพัฒนาโซลูชันที่กำหนดเองได้?

ฉันยินดีที่จะใช้โซลูชันเฉพาะฐานข้อมูลหากจำเป็นในกรณีนี้สำหรับ SQL Server 2008

โซลูตรอนของฉัน:ฉันกำลังเปรียบเทียบชุดข้อมูลสองชุดโดยการสร้างหนึ่งVIEWของแต่ละตารางบนฐานข้อมูลเก่าที่มีเขตข้อมูลเดียวกับตารางฐานข้อมูลใหม่

ฉันเปรียบเทียบข้อมูลโดยใช้เทคนิคที่อธิบายไว้ที่นี่: วิธีที่สั้นที่สุดเร็วที่สุดและง่ายที่สุดในการเปรียบเทียบสองตารางใน SQL Server: UNION!

ฉันโชคดีในการโยกย้ายครั้งนี้เนื่องจากโครงสร้างของตารางโดยรวมคล้ายกับฐานข้อมูลเก่าโดยมีการย้ายเขตข้อมูลจากตารางหนึ่งไปยังอีกตารางหนึ่งลดลงหรือเพิ่ม ในกรณีของการตกและเพิ่มไม่มีอะไรที่จะเปรียบเทียบสำหรับเขตข้อมูลที่ย้ายหรือถูกรวมฉันจะคำนวณในมุมมองเพื่อให้ข้อมูลที่ถูกต้องสำหรับการเปรียบเทียบ

การUNIONเปรียบเทียบแสดงให้ฉันเห็นเฉพาะแถวที่มีความแตกต่างดังนั้นทันทีที่ข้อมูลถูกต้องฉันจะได้รับชุดผลลัพธ์ที่ว่างเปล่า


1
คุณจะทราบได้อย่างไรว่าข้อมูลถูกต้องหากมีการเปลี่ยนแปลงสกีมา เกิดอะไรขึ้นถ้าตารางถูกแบ่งหรือรวมกันเป็นต้น
gbn

อย่าประดิษฐ์ล้อใหม่ เพียงแค่ซื้อเครื่องมือ
Aaron Bertrand

@AaronBertrand - ขอบคุณสำหรับความคิดเห็นของคุณ แต่ในเวลา (3 ปีที่ผ่านมา) ฉันตรวจสอบความพร้อมของเครื่องมือนี้ แต่ไม่พบว่าไม่มีใครทำการเปรียบเทียบระหว่างschema ที่แตกต่างกัน ฉันหวังว่าลิงก์ของคุณจะเป็นเครื่องมือที่ฉันสามารถซื้อได้เพราะฉันยังต้องการ
โทนี่

@ โทนี่แน่นอนว่าคุณสามารถทำเช่นนั้นได้ด้วยเครื่องมือของ Red-Gate (ไม่แน่ใจเกี่ยวกับคนอื่น ๆ ) คุณเพียงแค่ทำการแมปแบบแมนนวล
Aaron Bertrand

@Tony schema ที่แตกต่างกันฐานข้อมูลเดียวกัน หรือ schema ที่แตกต่างกันฐานข้อมูลที่แตกต่างกันอย่างไร
Aaron Bertrand

คำตอบ:


7

ไม่สามารถเปรียบเทียบ schema ที่แตกต่างกันสองแบบได้มันเป็นการคำนวณว่าคุณมั่นใจในผลลัพธ์อย่างไร ฉันยืมมาจากเทคนิคการกระทบยอดธนาคารเป็นหลัก

สำคัญ: การกระทบยอดนี้ไม่ได้เกี่ยวกับการทำให้แน่ใจว่าปลายทางตรงกับแหล่งที่มาในบริบทของข้อมูล (มีเหตุผลที่คุณย้ายไปยังระบบใหม่) แต่คุณต้องอธิบายความแตกต่างใด ๆ !

พื้นฐาน:

  1. ระบุการวัดที่คุณจะใช้ในการวัด (เช่น: จำนวนผู้ใช้ทั้งหมด, ผลรวมของอายุทั้งหมด, รายการรหัสผู้ใช้และรหัสไปรษณีย์ ... ) ฉันพยายามใช้ตัวชี้วัดหลายตัวจาก: ผลรวม, ค่าเฉลี่ย & ตัวอย่าง / บันทึกรายละเอียด
  2. ดัมพ์ข้อมูลนี้ไปยังตำแหน่งทั่วไป (ผ่านการดู / รายงาน / อะไรก็ตามที่สมเหตุสมผล)
  3. เปรียบเทียบข้อมูลของคุณและตรวจสอบให้แน่ใจว่าสามารถอธิบายความแตกต่างได้

ฉันได้แบ่งการเปรียบเทียบออกเป็นหลายวิธี (โดยเฉพาะอย่างยิ่งสำหรับตัวชี้วัดแบบละเอียด):

  • ตามตาราง:โดยปกติจะใช้ตารางแหล่งที่มาเป็นคำจำกัดความสร้างชุดของมุมมองบนฐานข้อมูลปลายทางเพื่อลองและสร้างข้อมูลตารางต้นฉบับอีกครั้ง
  • ตามวัตถุ:ขึ้นอยู่กับฐานข้อมูลและสิ่งที่คุณจัดเก็บมันอาจเหมาะสมกว่าที่จะสร้างมุมมองแบบองค์รวมของวัตถุ (เช่น: ผู้ใช้) ในหลาย ๆ ตารางคล้ายกับการสร้างชุดของมุมมองเพื่อส่งคืนวัตถุนั้น ชุดผลลัพธ์
  • ตามรายงาน:หากฐานข้อมูลต้นทางมีชุดรายงานการจัดการที่ครอบคลุมครบถ้วนเทคนิคอื่นคือการทำซ้ำรายงานเหล่านั้นด้วยการจัดรูปแบบที่แน่นอน

เทคนิค:

ไม่ว่าจะใช้วิธีการใดในการผลิตสิ่งที่จะเปรียบเทียบกันฉันก็จบลงด้วยชุดของไฟล์ / views / dbs ที่เก็บข้อมูลต้นทางและปลายทางที่กระทบยอดได้จากนั้นขึ้นอยู่กับสื่อที่ฉันสามารถใช้เครื่องมือที่มีอยู่ทั่วไป เพื่อเปรียบเทียบพวกเขา การตั้งค่าของฉันเองคือ:

  1. ไฟล์เปรียบเทียบ
    สร้างสองโฟลเดอร์ที่แตกต่างกันสำหรับ SourceDB และ DestinationDB (เวลา / รุ่นประทับดังนั้นฉันรู้ว่าเมื่อฉันไม่ปรองดอง) และการถ่ายโอนจากการส่งออกของตัวชี้วัดของฉันเป็นไฟล์ชื่อ relevantly แล้วใช้เครื่องมือการเปรียบเทียบ (เช่นCSDiff ) เพื่อระบุความแตกต่าง

  2. การเปรียบเทียบของ Excel
    โดยเฉพาะอย่างยิ่งเมื่อต้องรับมือกับรายงานการจัดการฉันจะสร้างชุดของสมุดงาน Excel เพื่อเปรียบเทียบรายงาน (โดยใช้สาระสำคัญของการใช้ VLookups และการเปรียบเทียบผลรวม)

  3. การเปรียบเทียบข้อมูล
    แทนที่จะส่งออกข้อมูลการกระทบยอดไปยังไฟล์หรือรายงานให้ส่งออกไปยังฐานข้อมูลแยกจากนั้นใช้ข้อมูลเช่นRedgate SQL Data เปรียบเทียบเพื่อเปรียบเทียบฐานข้อมูล

เครื่องมืออื่น ๆ :

ไม่ลองสิ่งเหล่านี้ แต่การค้นหาโดย Google อย่างรวดเร็วเกี่ยวกับ 'เครื่องมือปรับยอดข้อมูล' ให้:

มีอีกหลายคน แต่สิ่งนั้นดูสมเหตุสมผล


ขอบคุณสำหรับคำแนะนำ อย่างที่คุณพูดมันเป็นไปไม่ได้ (ตอนนี้ฉันกำลังหาทางแก้ปัญหา) มันเป็นเรื่องยาก ฉันจะดูวิธีการที่คุณพูดถึง
Tony

ไม่ต้องกังวล @Tony, เคล็ดลับผมพบคือการพยายามทำลายมันเป็นขั้นตอนที่มีขนาดเล็กแล้วหาเครื่องมือที่มีอยู่สำหรับแต่ละขั้นตอน (คุณจะต้องเขียนสิ่งที่กำหนดเองบางส่วนก็เป็นเพียงเกี่ยวกับการลดความพยายามที่เป็นไปได้)
แอนดรู Bickerton

6

หากคุณต้องการเปรียบเทียบข้อมูลในการออกแบบฐานข้อมูลที่แตกต่างกันสองแบบคุณจะต้องเขียน SQL ที่เขียนด้วยมือเพื่อเปรียบเทียบข้อมูล

  • เกิดอะไรขึ้นถ้าตารางถูกแบ่งหรือรวมกันเป็นต้น
  • เกิดอะไรขึ้นถ้าคุณมีวันที่และเวลาตอนนี้คุณมี smalldatetime = ข้อมูลจะแตกต่างกัน
  • ...

ไม่มีไลบรารีของเฟรมเวิร์กสำหรับการตรวจสอบข้อมูลในฐานข้อมูลที่แตกต่างกันสองฐานข้อมูล

มีเพียงคุณเท่านั้นที่รู้ว่าคุณต้องการเปลี่ยนแปลงหรือแก้ไขอะไร


ฉันกลัวมาก แต่คิดว่าฉันจะถามในกรณีที่มีคนทำการเปรียบเทียบเช่นนี้ ฉันหวังว่าอาจมีเครื่องมือในการเร่งการเขียนแบบสอบถาม แต่อย่างที่คุณพูดฉันอาจต้องเขียนอะไรบางอย่างตั้งแต่เริ่มต้น
โทนี่

1
@ โทนี่: อ๋อ: เป็นเพราะเครื่องมือใด ๆ ไม่สามารถแยก "สิ่งที่ผิด" จาก "สิ่งที่เราเปลี่ยน"
gbn

5

เป็นไปไม่ได้ที่คุณจะเปรียบเทียบสกีมาที่แตกต่างกัน เพื่อแก้ปัญหาของคุณฉันจะคิดออกว่าคุณต้องเปรียบเทียบข้อมูลอะไร จากนั้นฉันจะสร้างมุมมองบนแต่ละเซิร์ฟเวอร์ที่จะดึงข้อมูลที่ฉันต้องการเปรียบเทียบกลับมา (คำนึงถึงประเภทของข้อมูลและเช่นนั้น)

เมื่อมุมมองทั้งสองเหมือนกันฉันจะใช้เครื่องมือของบุคคลที่สามเช่นข้อมูลประตูแดงเปรียบเทียบเพื่อดูว่าแถวใดมีความแตกต่างกัน

ฟังดูเหมือนเจ็บปวด โชคดี!


1
คุณบอกว่ามันเป็นไปไม่ได้แล้วให้วิธีแก้ปัญหาที่เป็นไปได้ :) อันที่จริงวิธีที่ฉันกำลังทำอยู่นั้นคล้ายกับข้อเสนอแนะของคุณยกเว้นฉันไม่ได้เปรียบเทียบผลลัพธ์โดยใช้เครื่องมือภายนอก แต่ทำทุกอย่างใน SQL ขอบคุณ
Tony

2

สองสามปีที่ผ่านมาฉันเขียนเครื่องมือเพื่อทำเช่นนั้น - การเปรียบเทียบข้อมูลระหว่างสองฐานข้อมูล ตั้งแต่นั้นฉันก็แปลงเป็นซอฟต์แวร์เชิงพาณิชย์และเผยแพร่ที่

www.sql-server-tool.com

  • ใบอนุญาตเดียวมีค่าใช้จ่าย 99 $ แต่คุณสามารถทดลองใช้ฟรี 30 วัน

โปรแกรม - ชื่อ SCT สำหรับ "เครื่องมือเปรียบเทียบเซิร์ฟเวอร์ SQL" (ฉันไม่เคยเก่งเรื่องการตั้งชื่อ :) - มีตัวเลือกการปรับแต่งมากมายเช่น: ละเว้นคอลัมน์ที่เลือกหรือระบุวิธีการเปรียบเทียบ (บันทึกโดยบันทึกหรือคีย์หลัก / การเปรียบเทียบดัชนี) การเปรียบเทียบ "เซสชัน" สามารถบันทึกและเล่นซ้ำได้ในภายหลังโดยไม่จำเป็นต้องป้อนพารามิเตอร์อีกครั้ง พารามิเตอร์บรรทัดคำสั่งสามารถใช้เพื่อทำการเปรียบเทียบอัตโนมัติได้อย่างสมบูรณ์

สำหรับหลายสิบล้านแถวมันอาจจะช้าไปหน่อย - ในกรณีนี้ฉันขอแนะนำให้เริ่มต้นด้วยชุดย่อยของข้อมูลที่น้อยกว่า - สมมติว่าเปรียบเทียบเฉพาะ 1,000 แถวแรก - และดูว่าจำเป็นต้องปรับแต่งกระบวนการใดหรือไม่

Dariusz Dziewialtowski-Gintowt


ขอขอบคุณที่แนะนำแอปของคุณฉันลองใช้แล้ว แต่ไม่ได้เปรียบเทียบschema ที่ต่างกันซึ่งเป็นสิ่งที่ฉันต้องทำ มันล้มเหลวขณะรับข้อมูลจากตารางแรก ฉันยังไม่แน่ใจว่าแอปจะจัดการปริมาณข้อมูลที่ฉันมีหรือไม่เนื่องจากดูเหมือนจะไม่มีวิธี จำกัด จำนวนแถวเปรียบเทียบ ตารางที่ฉันทดสอบมี 99 ล้านแถว
โทนี่
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.