การถ่ายโอนข้อมูลสำรองจาก MS SQL Server เวอร์ชันใหม่ไปยังเวอร์ชันเก่า

ประวัติศาสตร์

ครั้งหนึ่ง ฉันต้องการสำเนาสำรองของฐานข้อมูลการผลิตเพื่อทำให้เกิดจุดบกพร่อง

ด้วยความประหลาดใจ ฉันพบข้อจำกัดต่อไปนี้:

  1. มีการสำรองฐานข้อมูลในเวอร์ชัน 2016 SQL Server และเข้ากันไม่ได้กับฉัน 2014 SQL Server.
  2. บนคอมพิวเตอร์ที่ทำงานของฉัน ระบบปฏิบัติการที่ใช้คือ หน้าต่าง 7เลยอัพไม่ได้ SQL Server ถึงเวอร์ชัน 2016
  3. ผลิตภัณฑ์ที่สนับสนุนเป็นส่วนหนึ่งของระบบขนาดใหญ่ที่มีสถาปัตยกรรมแบบดั้งเดิมที่เชื่อมต่อกันอย่างแน่นหนา และยังติดต่อกับผลิตภัณฑ์และฐานอื่นๆ ด้วย ดังนั้นจึงอาจใช้เวลานานมากในการปรับใช้กับสถานีอื่น

จากข้อมูลข้างต้น ฉันได้ข้อสรุปว่าถึงเวลาแล้วสำหรับการแก้ปัญหาที่ไม่ได้มาตรฐาน

กู้คืนข้อมูลจากการสำรองข้อมูล

ฉันเลือกใช้เครื่องเสมือน ออราเคิล VM VirtualBox ด้วย Windows 10 (คุณสามารถถ่ายภาพทดสอบสำหรับเบราว์เซอร์ Edge ด้วยเหตุนี้). ติดตั้ง SQL Server 2016 บนเครื่องเสมือนและฐานข้อมูลแอปพลิเคชันถูกกู้คืนจากข้อมูลสำรอง (การแนะนำ).

การกำหนดค่าการเข้าถึง SQL Server บนเครื่องเสมือน

ถัดไป จำเป็นต้องทำตามขั้นตอนบางอย่างเพื่อให้สามารถเข้าถึง SQL Server จากภายนอกได้:

  1. สำหรับไฟร์วอลล์ ให้เพิ่มกฎเพื่อข้ามคำขอพอร์ต 1433.
  2. เป็นที่พึงปรารถนาที่การเข้าถึงเซิร์ฟเวอร์จะไม่ผ่านการรับรองความถูกต้องของ windows แต่ผ่าน SQL โดยใช้การเข้าสู่ระบบและรหัสผ่าน (การตั้งค่าการเข้าถึงง่ายกว่า) อย่างไรก็ตาม ในกรณีนี้ คุณต้องอย่าลืมเปิดใช้งาน SQL Authentication ในคุณสมบัติของ SQL Server
  3. ในการตั้งค่าผู้ใช้บน SQL Server บนแท็บ การแมปผู้ใช้ ระบุบทบาทของผู้ใช้สำหรับฐานข้อมูลที่กู้คืน db_securityadmin.

การถ่ายโอนข้อมูล

ที่จริงแล้วการถ่ายโอนข้อมูลนั้นประกอบด้วยสองขั้นตอน:

  1. การถ่ายโอนสคีมาข้อมูล (ตาราง มุมมอง กระบวนงานที่เก็บไว้ ฯลฯ)
  2. การถ่ายโอนข้อมูลนั่นเอง

การถ่ายโอนสคีมาข้อมูล

เราดำเนินการดังต่อไปนี้:

  1. เลือก งาน -> สร้างสคริปต์ สำหรับฐานพกพา
  2. เลือกวัตถุที่คุณต้องการถ่ายโอนหรือปล่อยให้เป็นค่าเริ่มต้น (ในกรณีนี้ สคริปต์จะถูกสร้างขึ้นสำหรับวัตถุฐานข้อมูลทั้งหมด)
  3. ระบุการตั้งค่าสำหรับบันทึกสคริปต์ การบันทึกสคริปต์ในไฟล์ Unicode ไฟล์เดียวจะสะดวกที่สุด จากนั้นในกรณีที่ล้มเหลว คุณไม่จำเป็นต้องทำซ้ำขั้นตอนทั้งหมดอีกครั้ง

เมื่อบันทึกสคริปต์แล้ว สามารถรันบน SQL Server ดั้งเดิม (เวอร์ชันเก่า) เพื่อสร้างฐานที่ต้องการได้

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

การถ่ายโอนข้อมูล

ก่อนถ่ายโอนข้อมูล คุณต้องปิดการตรวจสอบข้อ จำกัด ทั้งหมดในฐานข้อมูล:

EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all'

การถ่ายโอนข้อมูลดำเนินการโดยใช้ตัวช่วยสร้างการนำเข้าข้อมูล งาน -> นำเข้าข้อมูล บน SQL Server ซึ่งเป็นที่ตั้งของฐานข้อมูลที่สร้างโดยสคริปต์:

  1. ระบุการตั้งค่าการเชื่อมต่อกับต้นทาง (SQL Server 2016 บนเครื่องเสมือน) ฉันใช้แหล่งข้อมูล ไคลเอ็นต์ดั้งเดิมของเซิร์ฟเวอร์ SQL และการพิสูจน์ตัวตน SQL ดังกล่าว
  2. ระบุการตั้งค่าการเชื่อมต่อสำหรับปลายทาง (SQL Server 2014 บนเครื่องโฮสต์)
  3. ถัดไป ตั้งค่าการแมป ต้องเลือกทั้งหมด ไม่อ่านอย่างเดียว ออบเจ็กต์ (เช่น ไม่จำเป็นต้องเลือกมุมมอง) เป็นตัวเลือกเพิ่มเติม ให้เลือก "อนุญาตให้แทรกลงในคอลัมน์ข้อมูลประจำตัว"หากมีการใช้
    คำเตือน: ถ้าเมื่อพยายามเลือกหลายตารางและตั้งค่าคุณสมบัติ "อนุญาตให้แทรกลงในคอลัมน์ข้อมูลประจำตัว" คุณสมบัติได้รับการตั้งค่าสำหรับตารางที่เลือกอย่างน้อยหนึ่งตาราง กล่องโต้ตอบจะระบุว่าคุณสมบัติได้รับการตั้งค่าสำหรับตารางที่เลือกทั้งหมดแล้ว ข้อเท็จจริงนี้อาจสร้างความสับสนและนำไปสู่ข้อผิดพลาดในการย้ายข้อมูล
  4. เราเริ่มการถ่ายโอน
  5. การกู้คืนการตรวจสอบข้อจำกัด:
    EXEC sp_msforeachtable 'ALTER TABLE ? CHECK CONSTRAINT all'

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

ข้อสรุป

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

รายการแหล่งที่มาที่ใช้

ที่มา: will.com