กู้คืนฐานข้อมูลจากไฟล์สำรองของรุ่น / รุ่นที่แตกต่างกัน


11

ฉันอ่านว่าเป็นไปได้ที่จะกู้คืนฐานข้อมูลใน SQL Server ตราบใดที่คุณกำลังกู้คืนจากรุ่นเก่าเป็นรุ่นที่ใหม่กว่าด้วยเหตุผลด้านความเข้ากันได้ย้อนหลัง

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

ด้านล่างนี้เป็นแบบสอบถามเพื่อรับรายละเอียดรุ่นของ SQL Server อยู่ในรูปแบบproductversion {major revision}.{minor revision}.{release revision}.{build number}ในกรณีของฉัน{release revision}ค่ามี5500สำหรับแหล่งที่มาและ5512เป้าหมาย นั่นดูไม่เป็นไร อย่างไรก็ตามความeditionแตกต่าง

ค้นหา:

SELECT 
  SERVERPROPERTY('productversion'), 
  SERVERPROPERTY('productlevel'), 
  SERVERPROPERTY('edition')

ฐานข้อมูลแหล่งที่มา:

10.0.5500.0
SP3
Developer Edition (64-bit)

ฐานข้อมูลเป้าหมาย:

10.0.5512.0
SP3
Enterprise Edition (64-bit)

วิธีการคืนค่าแฟ้มสำรองข้อมูลจาก SQL Server 2012 Business Intelligence Edition เป็นอินสแตนซ์นักพัฒนา
sdg320

คำตอบ:


15

จาก Developer ไปยัง Enterprise จะไม่เป็นไรให้แน่ใจว่าหากคุณใช้สิทธิ์การใช้งานตัวประมวลผลคุณมีสิทธิ์ใช้งานบนเซิร์ฟเวอร์เป้าหมายเพื่อครอบคลุม CPU ทั้งหมด และไม่เพียงพอที่จะซ่อนพวกเขาจาก SQL หากพวกเขาเชื่อมต่อกับเครื่องคุณต้องรับผิดชอบต่อพวกเขา

นอกจากนี้เมื่อคุณเปลี่ยนจากบิลด์ต่ำเป็นบิลด์ที่สูงกว่าเวอร์ชันฐานข้อมูลของคุณจะเพิ่มขึ้น มีบางสถานการณ์ที่อาจเป็นปัญหาได้ - เช่นหากคุณใช้การสนับสนุนพาร์ติชัน 15,000 ในการสร้างเฉพาะของปี 2008 มันจะไม่ทำงานเมื่อคุณอัปเกรดเป็น build เฉพาะของ 2008 R2 คุณอาจต้องพึ่งพาการปรับให้เหมาะสม (และมีวิธีแก้ไขปัญหา) ซึ่งเป็นข้อบกพร่องจริง ๆ ในงานสร้างรุ่นเก่า แต่ได้รับการแก้ไขในงานสร้างใหม่และสิ่งนี้อาจนำไปสู่ประสิทธิภาพที่แย่ลง นอกจากนี้ยังเป็นสิ่งสำคัญในการตรวจสอบสถานะการติดตามใด ๆ ที่ใช้งานอยู่ที่แหล่งที่มาและพิจารณาว่าควรเปิดใช้งานที่ปลายทางหรือไม่ ไม่ต้องสนใจงานการเข้าสู่ระบบ ฯลฯ

แน่นอนคุณไม่สามารถย้อนกลับได้ ฉันไม่เคยลองปรับลดรุ่นเล็กน้อยเช่น 10.0.5512 -> 10.0.5500 แต่มันเป็นไปไม่ได้แน่นอนที่จะลงไปใน Service Pack หรือรุ่น ดังนั้นหากคุณมีฐานข้อมูล 2012 ในอินสแตนซ์ Developer Edition ของคุณและคุณต้องการใส่ไว้ในอินสแตนซ์ 2008 ของคุณในการผลิตคุณจะได้ผลงานของคุณถูกตัดออก (ดูที่นี่และที่นี่ ) โดยเฉพาะอย่างยิ่งถ้าคุณใช้คุณสมบัติ 2012 .


แต่เพื่อครอบคลุมกรณีอื่น ๆ ที่อาจทำให้ผู้คนในคำถามนี้ (เช่นมีคนต้องการไปจากนักพัฒนา -> มาตรฐานหรือองค์กร -> ด่วนหรือสิ่งที่มีคุณ) ...

มีรุ่นอื่น ๆ -> การอัปเกรดรุ่นที่ทำได้ไม่ดีนักเช่นจากนักพัฒนา -> Express หากคุณใช้คุณสมบัติใด ๆ ที่ไม่ได้รับการสนับสนุนใน Express (และจะเหมือนกันกับรุ่นอื่น ๆ ที่ไม่ใช่ Enterprise จริงๆ) ตัวอย่างของคุณสมบัติที่คุณจะไม่สามารถใช้กับรุ่นระดับล่างได้ (ซึ่งในกรณีนี้การคืนค่าจะตายเมื่อถึงจุดที่ฐานข้อมูลออนไลน์พยายามนำมาใช้):

  • การแยก
  • เปลี่ยนการเก็บข้อมูล
  • การบีบอัดข้อมูล
  • การเข้ารหัสข้อมูลแบบโปร่งใส

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

SELECT feature_name FROM sys.dm_db_persisted_sku_features;

ฉันไม่แน่ใจว่าการตรวจสอบ SQL Server ควรอยู่ในรายการนั้นหรือไม่การเปลี่ยนแปลงรุ่นของคุณสมบัตินั้นจึงอาจขึ้นอยู่กับสิ่งที่คุณทำ มีสิ่งอื่น ๆ ที่คุณอาจใช้อยู่ แต่จะไม่ปรากฏใน DMV (บางอย่างเป็นเพราะอยู่ในรหัสของคุณซึ่ง DMV ไม่แยกวิเคราะห์และบางอย่างเนื่องจากฐานข้อมูลของคุณอาศัยสิ่งภายนอกเช่น SQL Server Agent , นายหน้าบริการ ฯลฯ ):

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

นอกจากนี้ยังมีกรณีที่คุณจะไม่สามารถไปจาก Developer to Express ได้เนื่องจากข้อ จำกัด ขนาดไฟล์ (ฐานข้อมูล Express ถูก จำกัด ไว้ที่ 10GB ในขนาดไฟล์ข้อมูลทั้งหมด)

แน่นอนอาจมี gotchas อื่น ๆ ที่คุณจะไม่ได้รับการเตือนเกี่ยวกับ - พวกเขาจะไม่ป้องกันการโยกย้าย แต่พวกเขาอาจนำไปสู่ประสิทธิภาพที่แตกต่างกันมากในเป้าหมาย ตัวอย่าง:

  1. ข้อ จำกัด หน่วยความจำ / CPU ที่แตกต่างกันในรุ่นเป้าหมาย (หรือแม้กระทั่งระบบปฏิบัติการพื้นฐานบนเป้าหมาย) ผู้คนจำนวนมากที่เปลี่ยนจาก 2008 R2 Enterprise เป็น 2012 Enterprise (CAL) ซึ่งบริการนี้ถูก จำกัด ไว้ที่ 20 คอร์แรกเท่านั้น สิ่งนี้สามารถนำไปสู่ความแตกต่างของประสิทธิภาพที่ตรงไปตรงมา (หน่วยความจำไม่เพียงพอที่จะตอบแบบสอบถามเช่นหรือประสิทธิภาพของแบบสอบถามแบบขนานที่ช้ากว่า) สิ่งที่ลึกซึ้งยิ่งขึ้นรวมถึงตัวเลือกแผนที่ทำขึ้นเนื่องจากฮาร์ดแวร์พื้นฐานที่แตกต่างกัน
  2. NOEXPANDการพึ่งพาคุณสมบัติเช่นการจับคู่การจัดทำดัชนีมุมมองกับแหล่งที่มาจะไม่ได้รับการเคารพโดยอัตโนมัติตามเป้าหมายโดยไม่ต้องเปลี่ยนรหัสที่มากับการใช้งาน และคุณอาจไม่ทราบด้วยซ้ำว่าความสามารถนี้เป็นสาเหตุที่ทำให้แบบสอบถามของคุณช้าลง
  3. กันสำหรับการดำเนินการดัชนีแบบขนานและอาจเป็นการเพิ่มประสิทธิภาพอื่น ๆ ที่ไม่ได้คำนึงถึงในขณะนี้ (ขอบคุณที่ฉันทำงานเกือบเฉพาะในพื้นที่องค์กรดังนั้นฉันไม่ต้องกังวลเกี่ยวกับข้อ จำกัด ของรุ่นที่ต่ำกว่าในกรณีส่วนใหญ่ )

อัปเดตตามข้อมูลซ้ำนี้ :

อาจมีบางกรณีที่คุณพยายามกู้คืนฐานข้อมูลจากรุ่นที่แน่นอนไปเป็นรุ่นที่น้อยกว่า (แม้จะเป็นรุ่นเดียวกัน) และคุณได้รับข้อผิดพลาดที่มีประโยชน์น้อยกว่า :

RESTORE ล้มเหลวสำหรับเซิร์ฟเวอร์ 'เซิร์ฟเวอร์ \ instance'
RESTORE ไม่สามารถเริ่มฐานข้อมูล 'databasename'

มันไม่ง่ายนัก อย่างไรก็ตามหากคุณมองลึกลงไปในบันทึกเหตุการณ์ของ SQL Server คุณจะเห็นข้อผิดพลาดที่มีประโยชน์มากขึ้น (ตัวอย่างเดียว):

ฐานข้อมูล 'databasename' ไม่สามารถเริ่มทำงานได้เนื่องจากฟังก์ชันการทำงานของฐานข้อมูลบางส่วนไม่พร้อมใช้งานใน SQL Server รุ่นปัจจุบัน
ฐานข้อมูล 'databasename' ไม่สามารถเริ่มใน SQL Server รุ่นนี้ได้เนื่องจากมีฟังก์ชันพาร์ติชัน '_dta_pf__9987' SQL Server รุ่น Enterprise เท่านั้นที่รองรับฟังก์ชั่นพาร์ติชัน

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

  1. คืนค่าเป็น SQL Server รุ่นที่เหมาะสมซึ่งจะหมายถึงการค้นหาหรือติดตั้งอินสแตนซ์ใหม่
  2. คืนค่าการสำรองข้อมูลบนเซิร์ฟเวอร์ต้นทางเป็นฐานข้อมูลใหม่ที่มีชื่อแตกต่างกันลบคุณลักษณะใด ๆ และทั้งหมดขององค์กรจากนั้นสำรองฐานข้อมูลอีกครั้งและเรียกคืนข้อมูลนั้นในรุ่นที่น้อยกว่า (ในกรณีนี้โดยเฉพาะฉันทิ้งชื่อของฟังก์ชั่นพาร์ติชันไว้ในข้อความแสดงข้อผิดพลาดเพราะมันดูเหมือนว่าจะเป็นสิ่งที่ถูกทิ้งอยู่แล้ว - มันถูกสร้างขึ้นโดย Database Engine Tuning Advisor และอาจทำได้โดยคนที่ไม่ได้ค่อนข้าง รู้ว่าพวกเขากำลังทำอะไรอยู่นี่ไม่ใช่กรณีเสมอไป)

การเปลี่ยนแปลงใน (2) จะเป็นการลบการแบ่งพาร์ติชันและคุณลักษณะอื่น ๆ บนฐานข้อมูลต้นทางและทำการสำรองข้อมูลอีกครั้ง แต่ถ้ามันไม่พัง ...


3

นักพัฒนาและองค์กรเป็นซอฟต์แวร์เดียวกันโดยมีข้อตกลงสิทธิ์ใช้งานต่าง ๆ

คุณควรทำการกู้คืนฐานข้อมูลนี้ที่ปลายทางของคุณอย่างดี

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