ประวัติศาสตร์
ครั้งหนึ่ง ฉันต้องการสำเนาสำรองของฐานข้อมูลการผลิตเพื่อทำให้เกิดจุดบกพร่อง
ด้วยความประหลาดใจ ฉันพบข้อจำกัดต่อไปนี้:
- มีการสำรองฐานข้อมูลในเวอร์ชัน 2016 SQL Server และเข้ากันไม่ได้กับฉัน 2014 SQL Server.
- บนคอมพิวเตอร์ที่ทำงานของฉัน ระบบปฏิบัติการที่ใช้คือ หน้าต่าง 7เลยอัพไม่ได้ SQL Server ถึงเวอร์ชัน 2016
- ผลิตภัณฑ์ที่สนับสนุนเป็นส่วนหนึ่งของระบบขนาดใหญ่ที่มีสถาปัตยกรรมแบบดั้งเดิมที่เชื่อมต่อกันอย่างแน่นหนา และยังติดต่อกับผลิตภัณฑ์และฐานอื่นๆ ด้วย ดังนั้นจึงอาจใช้เวลานานมากในการปรับใช้กับสถานีอื่น
จากข้อมูลข้างต้น ฉันได้ข้อสรุปว่าถึงเวลาแล้วสำหรับการแก้ปัญหาที่ไม่ได้มาตรฐาน
กู้คืนข้อมูลจากการสำรองข้อมูล
ฉันเลือกใช้เครื่องเสมือน
การกำหนดค่าการเข้าถึง SQL Server บนเครื่องเสมือน
ถัดไป จำเป็นต้องทำตามขั้นตอนบางอย่างเพื่อให้สามารถเข้าถึง SQL Server จากภายนอกได้:
- สำหรับไฟร์วอลล์ ให้เพิ่มกฎเพื่อข้ามคำขอพอร์ต 1433.
- เป็นที่พึงปรารถนาที่การเข้าถึงเซิร์ฟเวอร์จะไม่ผ่านการรับรองความถูกต้องของ windows แต่ผ่าน SQL โดยใช้การเข้าสู่ระบบและรหัสผ่าน (การตั้งค่าการเข้าถึงง่ายกว่า) อย่างไรก็ตาม ในกรณีนี้ คุณต้องอย่าลืมเปิดใช้งาน SQL Authentication ในคุณสมบัติของ SQL Server
- ในการตั้งค่าผู้ใช้บน SQL Server บนแท็บ การแมปผู้ใช้ ระบุบทบาทของผู้ใช้สำหรับฐานข้อมูลที่กู้คืน db_securityadmin.
การถ่ายโอนข้อมูล
ที่จริงแล้วการถ่ายโอนข้อมูลนั้นประกอบด้วยสองขั้นตอน:
- การถ่ายโอนสคีมาข้อมูล (ตาราง มุมมอง กระบวนงานที่เก็บไว้ ฯลฯ)
- การถ่ายโอนข้อมูลนั่นเอง
การถ่ายโอนสคีมาข้อมูล
เราดำเนินการดังต่อไปนี้:
- เลือก งาน -> สร้างสคริปต์ สำหรับฐานพกพา
- เลือกวัตถุที่คุณต้องการถ่ายโอนหรือปล่อยให้เป็นค่าเริ่มต้น (ในกรณีนี้ สคริปต์จะถูกสร้างขึ้นสำหรับวัตถุฐานข้อมูลทั้งหมด)
- ระบุการตั้งค่าสำหรับบันทึกสคริปต์ การบันทึกสคริปต์ในไฟล์ Unicode ไฟล์เดียวจะสะดวกที่สุด จากนั้นในกรณีที่ล้มเหลว คุณไม่จำเป็นต้องทำซ้ำขั้นตอนทั้งหมดอีกครั้ง
เมื่อบันทึกสคริปต์แล้ว สามารถรันบน SQL Server ดั้งเดิม (เวอร์ชันเก่า) เพื่อสร้างฐานที่ต้องการได้
คำเตือน: หลังจากเรียกใช้สคริปต์ คุณต้องตรวจสอบความสอดคล้องระหว่างการตั้งค่าของฐานข้อมูลจากข้อมูลสำรองและฐานข้อมูลที่สร้างโดยสคริปต์ ในกรณีของฉัน ไม่มีการตั้งค่าสำหรับ COLLATE ในสคริปต์ ซึ่งนำไปสู่ความล้มเหลวเมื่อถ่ายโอนข้อมูลและเต้นรำกับแทมบูรีนเพื่อสร้างฐานข้อมูลใหม่โดยใช้สคริปต์เสริม
การถ่ายโอนข้อมูล
ก่อนถ่ายโอนข้อมูล คุณต้องปิดการตรวจสอบข้อ จำกัด ทั้งหมดในฐานข้อมูล:
EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all'
การถ่ายโอนข้อมูลดำเนินการโดยใช้ตัวช่วยสร้างการนำเข้าข้อมูล งาน -> นำเข้าข้อมูล บน SQL Server ซึ่งเป็นที่ตั้งของฐานข้อมูลที่สร้างโดยสคริปต์:
- ระบุการตั้งค่าการเชื่อมต่อกับต้นทาง (SQL Server 2016 บนเครื่องเสมือน) ฉันใช้แหล่งข้อมูล ไคลเอ็นต์ดั้งเดิมของเซิร์ฟเวอร์ SQL และการพิสูจน์ตัวตน SQL ดังกล่าว
- ระบุการตั้งค่าการเชื่อมต่อสำหรับปลายทาง (SQL Server 2014 บนเครื่องโฮสต์)
- ถัดไป ตั้งค่าการแมป ต้องเลือกทั้งหมด ไม่อ่านอย่างเดียว ออบเจ็กต์ (เช่น ไม่จำเป็นต้องเลือกมุมมอง) เป็นตัวเลือกเพิ่มเติม ให้เลือก "อนุญาตให้แทรกลงในคอลัมน์ข้อมูลประจำตัว"หากมีการใช้
คำเตือน: ถ้าเมื่อพยายามเลือกหลายตารางและตั้งค่าคุณสมบัติ "อนุญาตให้แทรกลงในคอลัมน์ข้อมูลประจำตัว" คุณสมบัติได้รับการตั้งค่าสำหรับตารางที่เลือกอย่างน้อยหนึ่งตาราง กล่องโต้ตอบจะระบุว่าคุณสมบัติได้รับการตั้งค่าสำหรับตารางที่เลือกทั้งหมดแล้ว ข้อเท็จจริงนี้อาจสร้างความสับสนและนำไปสู่ข้อผิดพลาดในการย้ายข้อมูล - เราเริ่มการถ่ายโอน
- การกู้คืนการตรวจสอบข้อจำกัด:
EXEC sp_msforeachtable 'ALTER TABLE ? CHECK CONSTRAINT all'
หากมีข้อผิดพลาดเกิดขึ้น เราจะตรวจสอบการตั้งค่า ลบฐานข้อมูลที่สร้างโดยมีข้อผิดพลาด สร้างใหม่จากสคริปต์ ทำการแก้ไข และถ่ายโอนข้อมูลซ้ำ
ข้อสรุป
งานนี้ค่อนข้างหายากและเกิดขึ้นเนื่องจากข้อจำกัดข้างต้นเท่านั้น วิธีแก้ไขที่พบบ่อยที่สุดคืออัปเกรด SQL Server หรือเชื่อมต่อกับเซิร์ฟเวอร์ระยะไกล หากสถาปัตยกรรมแอปพลิเคชันอนุญาต อย่างไรก็ตาม ไม่มีใครรอดพ้นจากรหัสเดิมและมือที่คดโกงของการพัฒนาคุณภาพต่ำ ฉันหวังว่าคุณจะไม่ต้องการคำแนะนำนี้ แต่ถ้าคุณยังต้องการ มันจะช่วยประหยัดเวลาและความกังวลใจได้มาก ขอขอบคุณสำหรับความสนใจของคุณ!
รายการแหล่งที่มาที่ใช้
ฉันจะจัดการกับข้อจำกัด FK เมื่อนำเข้าข้อมูลโดยใช้ DTS Import/Export Wizard ได้อย่างไร ไม่สามารถประมวลผลคอลัมน์ "คอลัมน์ 2" ได้เนื่องจากมีการระบุหน้าโค้ดมากกว่าหนึ่งหน้า (65001 และ 1252) สำหรับคอลัมน์นี้ ฉันจะเชื่อมต่อกับ SQLServer ที่ทำงานบน VirtualBox จากโฮสต์ Macbook ของฉันได้อย่างไร SQL SERVER - เปิดใช้งานการแทรกข้อมูลประจำตัว - ตัวช่วยสร้างการนำเข้าผู้เชี่ยวชาญ การแก้ไขปัญหา Microsoft SQL Server Error 18456 การเข้าสู่ระบบล้มเหลวสำหรับผู้ใช้
ที่มา: will.com