คู่มือการซิงโครไนซ์ข้อมูลใน Microsoft SQL Server

เผยแพร่แล้ว: 2022-03-11

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

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

แหล่งข้อมูลต่าง ๆ ถูกสับรวมกันเป็นคำสั่ง SQL

ในหลายองค์กร การซิงโครไนซ์ข้อมูลระหว่างระบบที่หลากหลายเป็นสิ่งที่พึงปรารถนาและท้าทาย เราพบกรณีการใช้งานหลายอย่างที่เราจำเป็นต้องทำการซิงโครไนซ์ข้อมูล:

  • การย้ายฐานข้อมูล
  • การซิงโครไนซ์ระหว่างระบบสารสนเทศเป็นประจำ
  • การนำเข้าข้อมูลจากระบบข้อมูลหนึ่งไปยังอีกระบบหนึ่ง
  • การย้ายชุดข้อมูลระหว่างขั้นตอนหรือสภาพแวดล้อมต่างๆ
  • การนำเข้าข้อมูลจากแหล่งที่ไม่ใช่ฐานข้อมูล

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

เราสามารถใช้สถาปัตยกรรมสำหรับงานการซิงโครไนซ์ข้อมูลด้วยตนเอง อาจใช้ Microsoft Sync Framework หรือใช้ประโยชน์จากโซลูชันที่สร้างไว้แล้วภายในเครื่องมือสำหรับจัดการ Microsoft SQL Server เราจะพยายามอธิบายวิธีการและเครื่องมือทั่วไปที่สามารถใช้เพื่อแก้ปัญหาการซิงโครไนซ์ข้อมูลบนฐานข้อมูล Microsoft SQL Server และพยายามให้คำแนะนำ

ตามโครงสร้างของต้นทางและปลายทาง (เช่น ฐานข้อมูล ตาราง) เราสามารถแยกความแตกต่างของกรณีการใช้งานเมื่อโครงสร้างเหมือนหรือต่างกัน

ต้นทางและปลายทางมีโครงสร้างคล้ายกันมาก

กรณีนี้มักเกิดขึ้นเมื่อเราใช้ข้อมูลในขั้นตอนต่างๆ ของวงจรการพัฒนาซอฟต์แวร์ ตัวอย่างเช่น โครงสร้างข้อมูลในสภาพแวดล้อมการทดสอบและการผลิตจะคล้ายกันมาก ข้อกำหนดทั่วไปคือการเปรียบเทียบข้อมูลระหว่างฐานข้อมูลการทดสอบและการผลิต และการนำเข้าข้อมูลจากการผลิตไปยังฐานข้อมูลการทดสอบ

ต้นทางและปลายทางมีโครงสร้างต่างกัน

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

วิธีการที่ใช้ขึ้นอยู่กับความชอบส่วนบุคคลและความซับซ้อนของปัญหาที่คุณต้องแก้ไข

ไม่ว่าโครงสร้างจะคล้ายกันเพียงใด เราสามารถเลือกวิธีต่างๆ ในการแก้ปัญหาการซิงโครไนซ์ข้อมูลได้สี่วิธี:

  • การซิงโครไนซ์โดยใช้สคริปต์ SQL ที่สร้างขึ้นเอง
  • การซิงโครไนซ์โดยใช้วิธีเปรียบเทียบข้อมูล (ใช้ได้เฉพาะเมื่อต้นทางและปลายทางมีโครงสร้างคล้ายกัน)
  • การซิงโครไนซ์โดยใช้สคริปต์ SQL ที่สร้างขึ้นโดยอัตโนมัติ - ต้องการผลิตภัณฑ์เชิงพาณิชย์

ต้นทางและปลายทางมีโครงสร้างเหมือนกันหรือคล้ายกันมาก

การใช้สคริปต์ SQL ที่สร้างด้วยตนเอง

วิธีแก้ปัญหาที่ตรงไปตรงมาและน่าเบื่อที่สุดคือการเขียนสคริปต์ SQL สำหรับการซิงโครไนซ์ด้วยตนเอง

ข้อดี

  • สามารถทำได้โดยเครื่องมือฟรีและโอเพ่นซอร์ส (FOSS)
  • หากตารางมีดัชนีจะเร็วมาก
  • สคริปต์ SQL สามารถบันทึกลงในกระบวนงานที่เก็บไว้ หรือเรียกใช้เป็นระยะเป็นงานสำหรับ SQL Server
  • สามารถใช้เป็นการนำเข้าอัตโนมัติ แม้ในข้อมูลที่เปลี่ยนแปลงอย่างต่อเนื่อง

ข้อเสีย

  • การสร้างสคริปต์ SQL ดังกล่าวค่อนข้างน่าเบื่อ เนื่องจากปกติแล้วจำเป็นต้องใช้สามสคริปต์สำหรับแต่ละตาราง: INSERT , UPDATE และ DELETE
  • คุณสามารถซิงโครไนซ์ข้อมูลที่พร้อมใช้งานผ่านการสืบค้น SQL เท่านั้น ดังนั้นคุณจึงไม่สามารถนำเข้าจากแหล่งที่มา เช่น ไฟล์ CSV และ XML
  • เป็นการยากที่จะรักษา—เมื่อโครงสร้างฐานข้อมูลมีการเปลี่ยนแปลง จำเป็นต้องแก้ไขสคริปต์สองหรือสามสคริปต์ ( INSERT , UPDATE และบางครั้ง DELETE ก็เช่นกัน )

ตัวอย่าง

เราจะซิงโครไนซ์ระหว่างตาราง Source กับคอลัมน์ ID และ Value และตาราง Target ที่มีคอลัมน์เดียวกัน

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

 -- insert INSERT INTO Target (ID, Value) SELECT ID, Value FROM Source WHERE NOT EXISTS (SELECT * FROM Target WHERE Target.ID = Source.ID); -- update UPDATE Target SET Value = Source.Value FROM Target INNER JOIN Source ON Target.ID = Source.ID -- delete DELETE FROM Target WHERE NOT EXISTS (SELECT * FROM Source WHERE Target.ID = Source.ID)

การใช้วิธีเปรียบเทียบข้อมูล

ในวิธีนี้ เราสามารถใช้เครื่องมือเพื่อเปรียบเทียบระหว่างข้อมูลต้นทางและปลายทาง กระบวนการเปรียบเทียบจะสร้างสคริปต์ SQL ที่ใช้ความแตกต่างจากฐานข้อมูลต้นทางไปยังฐานข้อมูลเป้าหมาย

มีโปรแกรมมากมายสำหรับการเปรียบเทียบข้อมูลและการซิงโครไนซ์ข้อมูล โปรแกรมเหล่านี้ส่วนใหญ่ใช้แนวทางเดียวกัน ผู้ใช้เลือกฐานข้อมูลต้นทางและเป้าหมาย แต่ทางเลือกอื่นอาจเป็นข้อมูลสำรอง DB โฟลเดอร์ที่มีสคริปต์ SQL หรือแม้แต่การเชื่อมต่อกับระบบควบคุมต้นทาง

ด้านล่างนี้เป็นเครื่องมือยอดนิยมที่ใช้วิธีการเปรียบเทียบข้อมูล:

  • dbForge Data Compare สำหรับ SQL Server
  • การเปรียบเทียบข้อมูล RedGate SQL
  • Apex SQL Data Diff

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

เครื่องมือเหล่านี้ยังมีการตั้งค่าเพิ่มเติมสำหรับการซิงโครไนซ์

เราจำเป็นต้องตั้งค่าตัวเลือกการกำหนดค่าต่อไปนี้ที่จำเป็นสำหรับการซิงโครไนซ์ข้อมูล:

ซิงค์คีย์

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

การจับคู่โต๊ะ

ตามค่าเริ่มต้น ตารางจะถูกจับคู่ตามชื่อ คุณสามารถเปลี่ยนค่านี้และจับคู่ได้ตามความต้องการของคุณ ในซอฟต์แวร์ dbForge Data Compare คุณสามารถเลือกการสืบค้น SQL ให้เป็นแหล่งที่มาหรือปลายทางได้

กระบวนการซิงโครไนซ์

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

ในขั้นตอนต่อไป มีสคริปต์ SQL ที่มีการโยกย้ายที่สร้างขึ้น สคริปต์นี้สามารถบันทึกหรือเรียกใช้ได้โดยตรง เพื่อความปลอดภัย เราสามารถสำรองข้อมูลฐานข้อมูลก่อนเรียกใช้สคริปต์นี้ได้ เครื่องมือ ApexSQL Data Diff สามารถสร้างโปรแกรมปฏิบัติการที่รันสคริปต์บนฐานข้อมูลที่เลือก สคริปต์นี้มีข้อมูลที่จำเป็นต้องเปลี่ยน ไม่ใช่ตรรกะว่าจะเปลี่ยนแปลงอย่างไร ซึ่งหมายความว่าไม่สามารถเรียกใช้สคริปต์โดยอัตโนมัติเพื่อจัดเตรียมการนำเข้าที่เกิดซ้ำ นั่นคือข้อเสียที่ใหญ่ที่สุดของแนวทางนี้

ข้อดี

  • ไม่จำเป็นต้องมีความรู้ขั้นสูงของ SQL และสามารถทำได้ผ่าน GUI
  • คุณมีความสามารถในการตรวจสอบความแตกต่างระหว่างฐานข้อมูลด้วยสายตาก่อนการซิงโครไนซ์

ข้อเสีย

  • เป็นคุณลักษณะขั้นสูงของผลิตภัณฑ์เชิงพาณิชย์
  • ประสิทธิภาพลดลงเมื่อถ่ายโอนข้อมูลปริมาณมหาศาล
  • สคริปต์ SQL ที่สร้างขึ้นมีเพียงความแตกต่าง ดังนั้นจึงไม่สามารถใช้ซ้ำสำหรับการซิงโครไนซ์ข้อมูลในอนาคตโดยอัตโนมัติ

ด้านล่างนี้ คุณจะเห็น UI ทั่วไปของเครื่องมือเหล่านี้

ความแตกต่างของข้อมูล ApexSQL

ความแตกต่างของข้อมูล ApexSQL

RedGate SQL Compare

RedGate SQL Compare

เปลี่ยนรายการใน dbForge Data Compare

เปลี่ยนรายการใน dbForge Data Compare

ซิงโครไนซ์กับ SQL . ที่สร้างโดยอัตโนมัติ

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

การซิงโครไนซ์โดย SQL ที่สร้างขึ้นโดยอัตโนมัติมีให้โดย SQL Database Studio เท่านั้น

SQL Database Studio มีอินเทอร์เฟซคล้ายกับวิธีเปรียบเทียบข้อมูล เราจำเป็นต้องเลือกแหล่งที่มาและเป้าหมาย (ฐานข้อมูลหรือตาราง) จากนั้นเราจำเป็นต้องตั้งค่าตัวเลือก (คีย์การซิงค์ การจับคู่และการแมป) มีคุณลักษณะตัวสร้างแบบสอบถามแบบกราฟิกสำหรับการตั้งค่าพารามิเตอร์ทั้งหมด

ข้อดี

  • ไม่จำเป็นต้องมีความรู้ขั้นสูงของ SQL
  • คุณสามารถตั้งค่าทุกอย่างใน GUI ได้อย่างรวดเร็ว
  • สคริปต์ SQL ที่เป็นผลลัพธ์สามารถบันทึกลงในกระบวนงานที่เก็บไว้ได้
  • สามารถใช้เป็นการนำเข้าอัตโนมัติ - เป็นงานสำหรับ SQL Server

ข้อเสีย

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

เกณฑ์มาตรฐานประสิทธิภาพ

กรณีทดสอบ

สองฐานข้อมูล (A และ B) แต่ละฐานข้อมูลมีหนึ่งตารางที่มี 2,000,000 แถว ตารางอยู่ในฐานข้อมูลที่แตกต่างกันสองฐานข้อมูลบน SQL Server เดียวกัน การทดสอบนี้ครอบคลุมกรณีที่รุนแรงสองกรณี: 1) ตารางต้นทางมีทั้งหมด 2,000,000 แถว และตารางเป้าหมายว่างเปล่า การซิงโครไนซ์จำเป็นต้องมี INSERTS จำนวนมาก 2) ตารางต้นทางและเป้าหมายมี 2,000,000 แถว ความแตกต่างอยู่ในแถวเดียวเท่านั้น การซิงโครไนซ์จำเป็นต้องให้ UPDATE เดียวเท่านั้น

RedGate Data Compare ต้องการ 3 ขั้นตอน:

  • เปรียบเทียบ
  • สร้างสคริปต์
  • เรียกใช้สคริปต์บนฐานข้อมูลเป้าหมาย

ApexSQL Data Diff ต้องการ 2 ขั้นตอน:

  • เปรียบเทียบ
  • สร้างสคริปต์และเรียกใช้สคริปต์ในขั้นตอนเดียว

SQL Database Studio ทำการซิงโครไนซ์ทั้งหมดในขั้นตอนเดียว ด้านล่างนี้คือเวลาในการซิงโครไนซ์ หน่วยเป็นวินาที ในคอลัมน์ชื่อ "ขั้นตอนส่วนบุคคล" คือระยะเวลาของขั้นตอนการซิงโครไนซ์ที่แสดงด้านบน

กรณี A. INSERT จำนวนมาก กรณีที่ ก. INSERT หลายข้อ (ทีละขั้น) กรณี B. UPDATE หนึ่งแถว กรณี ข. ปรับปรุงหนึ่งแถว (ทีละขั้น)
SQL Database Studio 47 5
ข้อมูล RedGate เปรียบเทียบ 317 13+92+212 23 22+0+1
ความแตกต่างของข้อมูล ApexSQL 188 18+170 26 25+

ล่างดีกว่า

การทดสอบเดียวกัน แต่ฐานข้อมูลอยู่บนเซิร์ฟเวอร์ SQL ที่แตกต่างกัน ซึ่งไม่ได้เชื่อมต่อผ่านเซิร์ฟเวอร์ที่เชื่อมโยง

กรณี A. INSERT จำนวนมาก กรณีที่ ก. INSERT หลายข้อ (ทีละขั้น) กรณี B. UPDATE หนึ่งแถว กรณี B. UPDATE หนึ่งแถว (ทีละขั้น)
SQL Database Studio 78 44
ข้อมูล RedGate เปรียบเทียบ 288 17+82+179 25 24+0+1
ความแตกต่างของข้อมูล ApexSQL 203 18+185 25 24+1
dbForge ข้อมูลเปรียบเทียบ 326 11+315 16 16+0

ล่างดีกว่า

สรุป

จากผลลัพธ์จะเห็นได้ชัดเจนว่า RedGate และ Apex ไม่สนใจว่าฐานข้อมูลจะอยู่บนเซิร์ฟเวอร์ SQL เดียวกันหรือไม่ เพราะอัลกอริธึมการซิงโครไนซ์ไม่ได้ขึ้นอยู่กับ SQL Server SQL Database Studio ใช้ฟังก์ชันดั้งเดิมของ SQL Server; ดังนั้นผลลัพธ์จะดีกว่าเมื่อฐานข้อมูลอยู่บนเซิร์ฟเวอร์เดียวกัน

ต้นทางและปลายทางมีโครงสร้างต่างกัน

นอกจากนี้ยังมีสถานการณ์ที่ต้องซิงโครไนซ์ตารางกว้างหนึ่งตารางกับตารางที่เกี่ยวข้องขนาดเล็กจำนวนมาก

ตัวอย่างนี้ประกอบด้วย SourceData ตารางกว้างหนึ่งรายการ ซึ่งจำเป็นต้องซิงโครไนซ์เป็นตารางขนาดเล็ก Continent Country และ City โครงการได้รับด้านล่าง

โครงการตัวอย่างฐานข้อมูล

ข้อมูลใน SourceData อาจเหมือนกับในภาพด้านล่าง

จุดข้อมูลสำหรับตัวอย่าง

การใช้สคริปต์ SQL ที่สร้างขึ้นด้วยตนเอง

สคริปต์การซิงโครไนซ์ตารางทวีป

 INSERT INTO Continent (Name) SELECT SourceData.Continent FROM SourceData WHERE (SourceData.Continent IS NOT NULL AND NOT EXISTS (SELECT * FROM Continent tested WHERE tested.Name =SourceData.Continent )) GROUP BY SourceData.Continent;

สคริปต์การซิงโครไนซ์ตารางเมือง

 INSERT INTO City (Name, CountryId) SELECT SourceData.City, Country.Id FROM SourceData LEFT JOIN Continent ON SourceData.Continent = Continent.Name LEFT JOIN Country ON SourceData.Country = Country.Name AND Continent.Id = Country.ContinentId WHERE SourceData.City IS NOT NULL AND Country.Id IS NOT NULL AND NOT EXISTS (SELECT * FROM City tested WHERE tested.Name = SourceData.City AND tested.CountryId = Country.Id) GROUP BY SourceData.City, Country.Id;

สคริปต์นี้ซับซ้อนกว่า เป็นเพราะว่าต้องค้นหาข้อมูลในตาราง Country และ Continent สคริปต์นี้แทรกระเบียนที่ขาดหายไปลงใน City และเติม ContryId ถูกต้อง

สคริปต์ UPDATE และ DELETE สามารถเขียนในลักษณะเดียวกันได้หากจำเป็น

ข้อดี

  • คุณไม่จำเป็นต้องมีผลิตภัณฑ์เชิงพาณิชย์ใดๆ
  • สคริปต์ SQL สามารถบันทึกลงในกระบวนงานที่เก็บไว้หรือเรียกใช้เป็นระยะเป็นงานสำหรับ SQL Server

ข้อเสีย

  • การสร้างสคริปต์ SQL นั้นยากและซับซ้อน (สำหรับแต่ละตาราง สามสคริปต์— INSERT , UPDATE และ DELETE — มักจะจำเป็น)
  • มันยากมากที่จะรักษา

การใช้เครื่องมือภายนอก

การซิงโครไนซ์ประเภทนี้ (ตารางกว้างเป็นตารางที่เกี่ยวข้องกันจำนวนมาก) ไม่สามารถทำได้ด้วยวิธีการเปรียบเทียบข้อมูล เนื่องจากจะเน้นไปที่กรณีการใช้งานที่แตกต่างกัน เนื่องจากวิธีเปรียบเทียบข้อมูลจะสร้างสคริปต์ SQL พร้อมข้อมูลที่จะแทรก จึงไม่มีความสามารถตรงไปตรงมาในการค้นหาข้อมูลอ้างอิงในตารางที่เกี่ยวข้อง ด้วยเหตุผลดังกล่าว แอปพลิเคชันที่ใช้วิธีนี้ไม่สามารถใช้งานได้ (dbForge Data Compare สำหรับ SQL Server, RedGate SQL Data Compare, Apex SQL Data Diff)

อย่างไรก็ตาม SQL Database Studio สามารถช่วยคุณสร้างสคริปต์การซิงโครไนซ์ได้โดยอัตโนมัติ ในภาพด้านล่าง มีองค์ประกอบที่เรียกว่า Editor for Data Synchronization ใน SQL Database Studio

ตัวแก้ไขสำหรับการซิงโครไนซ์ข้อมูลใน SQL Database Studio

Editor ดูเหมือนตัวสร้าง Query ที่รู้จักกันดีและทำงานในลักษณะที่คล้ายกันมาก แต่ละตารางต้องมีคีย์การซิงโครไนซ์ที่กำหนดไว้ แต่ก็มีความสัมพันธ์ที่กำหนดไว้ระหว่างตารางด้วย ในภาพด้านบนมีการทำแผนที่สำหรับการซิงโครไนซ์ด้วย ในรายการคอลัมน์ (ส่วนล่างของรูปภาพ) จะมีคอลัมน์ของตาราง City (สำหรับตารางอื่นๆ จะคล้ายกัน)

คอลัมน์

  • รหัส — คอลัมน์นี้ไม่ได้รับการแมปเพราะเป็นคีย์หลัก (สร้างโดยอัตโนมัติ)
  • CountryId — คอลัมน์นี้ถูกกำหนดให้เป็นข้อมูลอ้างอิงสำหรับตาราง
  • ชื่อ — คอลัมน์นี้เติมจากคอลัมน์ City ในตารางต้นทาง (ตารางกว้าง)

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

หลังจากการซิงโครไนซ์ ตารางจะมีลักษณะดังนี้:

เนื้อหาของตารางหลังจากการซิงโครไนซ์

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

ข้อดี

  • สร้างได้ง่ายและรวดเร็ว
  • ดูแลรักษาง่าย
  • สามารถบันทึกลงในกระบวนงานที่เก็บไว้ได้ (ขั้นตอนการจัดเก็บจะถูกบันทึกด้วยข้อมูลที่จำเป็นในการเปิดการซิงโครไนซ์ในตัวแก้ไขในภายหลัง)

ข้อเสีย

  • โซลูชันเชิงพาณิชย์

เปรียบเทียบโซลูชั่น

การซิงโครไนซ์ข้อมูลประกอบด้วยลำดับของคำสั่ง INSERT , UPDATE หรือ DELETE มีหลายวิธีในการสร้างลำดับของคำสั่งเหล่านี้ ในบทความนี้ เราได้พิจารณาสามตัวเลือกสำหรับการสร้างสคริปต์ SQL สำหรับการซิงโครไนซ์ ตัวเลือกแรกคือการสร้างทุกอย่างด้วยตนเอง เป็นไปได้ (แต่ต้องใช้เวลามากเกินไป) จำเป็นต้องมีความเข้าใจ SQL ที่ซับซ้อน และเป็นการยากที่จะสร้างและบำรุงรักษา ตัวเลือกที่สองคือการใช้เครื่องมือเชิงพาณิชย์ เราดูเครื่องมือต่อไปนี้:

  • dbForge Data Compare สำหรับ SQL Server
  • การเปรียบเทียบข้อมูล RedGate SQL
  • Apex SQL Data Diff
  • SQL Database Studio

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

  • ฐานข้อมูลไม่ซิงค์เนื่องจากข้อผิดพลาดต่างๆ
  • คุณต้องหลีกเลี่ยงการจำลองแบบขณะถ่ายโอนข้อมูลระหว่างสภาพแวดล้อม
  • จำเป็นต้องมีรายงานการเปรียบเทียบข้อมูลใน Excel หรือ HTML

แต่ละเครื่องมือเป็นที่ชื่นชอบด้วยเหตุผลใดก็ตาม: dbForge มี UI ที่ยอดเยี่ยมและมีตัวเลือกมากมาย ApexSQL ทำงานได้ดีกว่าที่เหลือ และ RedGate เป็นเครื่องมือที่ได้รับความนิยมมากที่สุด

เครื่องมือที่สี่ SQL Database Studio ทำงานแตกต่างออกไปเล็กน้อย มันสร้างสคริปต์ SQL ที่มีตรรกะการซิงโครไนซ์ ไม่ใช่การเปลี่ยนแปลง ประสิทธิภาพก็ยอดเยี่ยมเช่นกัน เนื่องจากงานทั้งหมดทำโดยตรงบนเซิร์ฟเวอร์ฐานข้อมูล ดังนั้นจึงไม่จำเป็นต้องถ่ายโอนข้อมูลระหว่างเซิร์ฟเวอร์ฐานข้อมูลและเครื่องมือการซิงโครไนซ์ เครื่องมือนี้มีประโยชน์สำหรับกรณีการใช้งานต่อไปนี้:

  • การย้ายฐานข้อมูลอัตโนมัติโดยที่ฐานข้อมูลมีโครงสร้างต่างกัน
  • นำเข้าไปยังตารางที่เกี่ยวข้องหลายตาราง
  • นำเข้าจากแหล่งภายนอก XML, CSV, MS Excel

ที่เกี่ยวข้อง: Oracle to SQL Server และ SQL Server to Oracle Migration Guide