ย้ายฐานข้อมูลจาก SQL Server 2012 เป็น 2008


29

ฉันมีฐานข้อมูลบนอินสแตนซ์ SQL Sever 2012 ซึ่งฉันต้องการคัดลอกไปยังเซิร์ฟเวอร์ 2008 เซิร์ฟเวอร์ 2008 ไม่สามารถกู้คืนข้อมูลสำรองที่สร้างขึ้นโดยเซิร์ฟเวอร์ 2012 (ฉันลองแล้ว)

ฉันไม่พบตัวเลือกใด ๆ ในปี 2012 เพื่อสร้างการสำรองข้อมูลที่เข้ากันได้ 2008 ฉันพลาดอะไรไปรึเปล่า?

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

ฐานข้อมูลไม่ได้ใช้คุณสมบัติเฉพาะของปี 2012 มันมีตารางข้อมูลและขั้นตอนการจัดเก็บ

นี่คือสิ่งที่ฉันได้ลองไปแล้ว

ฉันลองใช้งานสร้างสคริปต์บนเซิร์ฟเวอร์ 2012 และฉันสามารถสร้างสคีมา (รวมถึงขั้นตอนการจัดเก็บ) เป็นสคริปต์ SQL สิ่งนี้ไม่รวมถึงข้อมูลใด ๆ

หลังจากสร้าง schema นั้นบนเครื่อง 2008 ของฉันฉันสามารถเปิดตัวช่วยสร้าง "ส่งออกข้อมูล" ในเครื่อง 2012 และหลังจากกำหนดค่า 2012 เป็นเครื่องต้นทางและ 2008 เป็นเครื่องเป้าหมายฉันได้รับรายการตารางที่ฉัน สามารถคัดลอกได้ ฉันเลือกตารางทั้งหมดของฉัน (300+) แล้วคลิกผ่านตัวช่วยสร้าง น่าเสียดายที่มันใช้เวลานานในการสร้างสคริปต์จากนั้นล้มเหลวโดยมีข้อผิดพลาดเช่น "ความล้มเหลวในการแทรกลงในคอลัมน์แบบอ่านอย่างเดียว 'FOO_ID'"

ฉันยังลองใช้ "Copy Database Wizard" ซึ่งอ้างว่าสามารถคัดลอก "จาก 2000 หรือใหม่กว่าเป็น 2005 หรือใหม่กว่า" มันมีสองโหมด:

  1. "แยกและแนบ" ซึ่งล้มเหลวด้วยข้อผิดพลาด:

    Message: Index was outside the bounds of the array.
    StackTrace:    at Microsoft.SqlServer.Management.Smo.PropertyBag.SetValue(Int32 index, Object value)
    ...
    at Microsoft.SqlServer.Management.Smo.DataFile.get_FileName()
    
  2. วิธีการจัดการวัตถุ SQL ซึ่งล้มเหลวด้วยข้อผิดพลาด

    ไม่สามารถอ่านคุณสมบัติ IsFileStream คุณสมบัตินี้ไม่พร้อมใช้งานบน SQL Server 7.0 "


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

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

4
พยายามคิดให้ออกว่าทำไมทุกคนในใจที่ถูกต้องจะโยกย้ายถอยหลัง - ฉันมีเซิร์ฟเวอร์ที่ใช้งานจริงกำลังทำงานอยู่ในปี 2012 แต่เครื่อง dev ของฉันมีเพียงปี 2008 ฉันต้องการสำเนาฐานข้อมูลท้องถิ่นเพื่อช่วยในการพัฒนา แต่ฉันไม่ต้องการติดตั้ง 2012 บนเครื่อง dev เนื่องจากไม่ได้ติดตั้ง เหลือพื้นที่ว่างเหลือมากและไม่ต้องการใช้เวลาติดตั้งหลายชั่วโมง (ดังนั้นฉันจึงใช้เวลาหลายชั่วโมงในการย้ายกลับไปแทน .... แต่นั่นเป็นเพียงฉันเท่านั้น)
Rich

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

1
แค่ต้องการเพิ่มสำหรับ Ramhound: ฉันสำหรับ SQL 2008 R2 ที่อัพเกรดเป็น SQL 2012 บนสภาพแวดล้อม Dev ของฉันหลังจากนั้นฉันเปลี่ยน schema และข้อมูลจำนวนมากในอินสแตนซ์ที่อัปเกรดของฉันการรับรู้ VS 2010 ไม่สามารถเปรียบเทียบ schema หรือข้อมูลกับ SQL 2012 SSDT สำหรับ VS 2010 และ VS 2012 สามารถเปรียบเทียบ schema กับ SQL 2012 แต่ไม่เข้ากันได้กับโครงการฐานข้อมูล VS 2010 ดั้งเดิมและไม่สามารถเปรียบเทียบข้อมูลได้ เรื่องสั้นสั้นฉันอยากกลับไปที่ SQL 2008 R2 และรอจนกว่าการตัดสินใจจะทำให้ บริษัท ตัดสินใจที่จะก้าวไปข้างหน้าถึงปี 2012 แต่ฉันต้องการบันทึกสคีมา / ข้อมูลใหม่ของฉัน AFAIK ฉันคิดถูกแล้ว
GFK

คำตอบ:


40

คลิกขวาที่ฐานข้อมูลใน 2012 SQL Management Studio แล้วเลือก "Tasks -> Generate Scripts" คลิกผ่านหน้าจอต้อนรับให้เลือก "สคริปต์ฐานข้อมูลทั้งหมดและวัตถุฐานข้อมูลทั้งหมด" ในหน้า "ระบุวิธีการบันทึกสคริปต์" คลิก "ขั้นสูง" ภายใต้ "ทั่วไป" ในหน้าคุณสมบัติป๊อปอัปเปลี่ยน "ประเภทของข้อมูลเป็นสคริปต์" จาก "สคีมาเท่านั้น" เป็น "สคีมาและข้อมูล" และเปลี่ยน "สคริปต์สำหรับรุ่นเซิร์ฟเวอร์" จาก "2012" เป็น "2008"

จากนั้นฉันต้องหาวิธีแก้ไขจุดเริ่มต้นของไฟล์ SQL ขนาดใหญ่นี้เพื่อปรับแต่งวิธีสร้างฐานข้อมูล - ดูคำถามนี้: https://stackoverflow.com/questions/102829/best-free-text-editor -supporting มากขึ้นกว่า 4GB ไฟล์

และในที่สุดฉันก็ต้องหาวิธีที่จะเรียกใช้สคริปต์ SQL ซึ่งมีขนาดใหญ่เกินกว่าที่จะเปิดใน SQL Management Studio - ดู q นี้: https://stackoverflow.com/questions/431913/how-do-you-run- A-300MB-MS-SQL-SQL ไฟล์


คุณบิดอะไรตอนเริ่มต้นไฟล์
JonoRR

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

3
@JonoRR คุณน่าจะต้องการแก้ไขคำสั่ง CREATE DATABASE และตั้งค่าพา ธ ของไฟล์ datafile ให้เหมาะสมกับเซิร์ฟเวอร์ปลายทาง
Igby Largeman

12

สำหรับการย้ายข้อมูล SQL ให้ใช้ตัวช่วยสร้างการโยกย้ายฐานข้อมูล SQL แบบโอเพนซอร์สและฟรี

ฉันมีฐานข้อมูล 5GB ที่มีเร็กคอร์ดสองถึง 10 ล้านเรคคอร์ดและลองใช้เส้นทางผ่าน Generate Script และวิ่งกว่าด้วย sqlcmd.exe ก่อนอื่นสคริปต์ที่สร้างขึ้นนั้นทำงานได้ไม่ถูกต้องเสมอไป ประการที่สอง sqlcmd.exe สามารถล้มเหลวในไฟล์ขนาดใหญ่เกินไปบ่นเกี่ยวกับหน่วยความจำที่มีอยู่ osql.exe ทำงานได้ แต่ใช้เวลานาน (และมีอาร์กิวเมนต์บรรทัดคำสั่งเดียวกัน)

จากนั้นฉันเจอเครื่องมือที่ยอดเยี่ยมสำหรับการโอนย้ายเซิร์ฟเวอร์ SQL ไปยังฐานข้อมูล SQL Azure สิ่งนี้ใช้ได้สำหรับ SQL Server ไปยัง SQL Server เช่นกันหากคุณต้องการย้ายฐานข้อมูล SQL 2012 ไปยัง 2008 R2 มันใช้ bcp.exe ซึ่งใช้สำเนาจำนวนมาก มีเวอร์ชัน GUI และบรรทัดคำสั่ง (แบทช์) และเป็นโอเพ่นซอร์ส ดูhttp://sqlazuremw.codeplex.com/ ในกรณีของฉันการผ่าตัดใช้เวลา 16 นาที

ในหน้าจอขั้นสูงคุณสามารถเลือกว่าเป้าหมายของคุณคือ SQL Server ไม่ใช่ SQL Azure


1
คุณตั้งค่า 2008 R2 ในตัวช่วยสร้างนี้ที่ไหน
JonoRR

เคล็ดลับที่ยอดเยี่ยมฉันได้กู้คืนฐานข้อมูลจาก Express 2012 เป็น Web 2008 ง่ายมาก
rkawano

สามารถยืนยันได้ว่าทำงานได้ตามที่โฆษณาไว้ ทำ 2014-> 2012, ข้ามโดเมน, เซิร์ฟเวอร์ SQL แบบโลคอล เครื่องมือนี้มีวิธีหลีกเลี่ยงการค้นหาของฉันมานานแล้ว! ที่น่าตื่นตาตื่นใจแม้สำหรับการใช้งานที่ไม่ใช่สีฟ้า
Gomibushi

3

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


2

ลองใช้เครื่องมือAPEXSQL พวกเขามีเครื่องมือที่จะสคริปต์ฐานข้อมูลและสคริปต์ข้อมูลด้วย


"จาก $ 299" - มีทางเลือกฟรีหรือไม่
รวย

1

หลังจากสร้าง schema นั้นบนเครื่อง 2008 ของฉันฉันสามารถเปิดตัวช่วยสร้าง "ส่งออกข้อมูล" ในเครื่อง 2012 และหลังจากกำหนดค่า 2012 เป็นเครื่องต้นทางและ 2008 เป็นเครื่องเป้าหมายฉันได้รับรายการตารางที่ฉัน สามารถคัดลอกได้ ฉันเลือกตารางทั้งหมดของฉัน (300+) แล้วคลิกผ่านตัวช่วยสร้าง น่าเสียดายที่มันใช้เวลานานในการสร้างสคริปต์จากนั้นล้มเหลวโดยมีข้อผิดพลาดเช่น "ความล้มเหลวในการแทรกลงในคอลัมน์แบบอ่านอย่างเดียว 'FOO_ID'"

ปัญหาคือว่ามันไม่สามารถแทรกคอลัมน์ ID ดังนั้น:

  1. เลือกตารางทั้งหมดโดยเลือกพวกเขา
  2. เลือกตารางทั้งหมด (วิธีทำคือคลิกที่ตารางแรกแล้วกด shift ค้างไว้แล้วคลิกที่ตารางสุดท้าย)
  3. คลิกที่ "แก้ไขการแมป" - คุณจะเห็นว่าอยู่เหนือปุ่มถัดไปและถัดจากตัวอย่าง
  4. คุณจะได้หน้าต่างทำเครื่องหมายที่ "เปิดใช้งานการแทรกข้อมูลระบุตัวตน" จากนั้นคลิกถัดไปแล้วดำเนินการต่อ มันใช้งานได้สำหรับฉัน

1

ฉันติดตามโซลูชันของ Rich https://superuser.com/a/469597/312310ด้านบนและใช้งานได้ดี! ขอบคุณ - ฉันยังไม่สามารถโหวตได้ที่นี่!

ขั้นตอนพิเศษที่ฉันต้องทำเพื่อให้ได้งานคือ:

  • เปลี่ยนชื่อโลจิคัลไฟล์และตรวจสอบให้แน่ใจว่าพา ธ ถูกต้อง ฉันยังต้องเปลี่ยนชื่อบันทึกที่สร้างมิฉะนั้นจะพยายามเขียนทับไฟล์ mdf ด้วยบันทึกแล้วโยนข้อผิดพลาดนี้https://stackoverflow.com/questions/7534664/sql-server-script-error-database-is- พร้อมใช้งาน

    สร้างฐานข้อมูล [xxxxx] บนหลัก (NAME = xxxxx ', FILENAME = N'C: \ Program SQL Server \ MSSQL11.MSSQLSERVER \ MSSQL \ DATA \ xxxxx.mdf', SIZE = ไม่ จำกัด , FILEGROWTH = N'C: \ Program 1024KB) เข้าสู่ระบบ (NAME = N'xxxxxldf ', FILENAME = N'C: \ Program SQL Server \ MSSQL11.MSSQLSERVER \ MSSQL \ DATA \ xxxxx_log.ldf', SIZE = 18560KB, MAXSIZE = 2048GB, FILEGROWTH = 10 %) ไป

  • ฉันต้องแสดงความคิดเห็นในส่วนที่สร้างขึ้นและเพิ่มสิทธิ์ผู้ใช้ด้วยตนเองหลังจากนั้น

    USE [xxxxx]
    GO
    /****** Object:  User [xxxxx]    Script Date: 30/11/2014 12:44:07 ******/
    CREATE USER [xxxxx] FOR LOGIN [xxxxx] WITH DEFAULT_SCHEMA=[dbo]
    GO
    sys.sp_addrolemember @rolename = N'db_owner', @membername = N'Umbraco'
    GO
    sys.sp_addrolemember @rolename = N'db_datareader', @membername = N'Umbraco'
    GO
    sys.sp_addrolemember @rolename = N'db_datawriter', @membername = N'Umbraco'
    GO
    

เรียกใช้แล้วและดูเถิดฉันสามารถคืนค่าฐานข้อมูล Umbraco 7.1.2 ใหม่ของฉันไปยังเว็บเซิร์ฟเวอร์ของฉันที่มี SQL Server 2008 R2 เท่านั้น!


0

มีรูปลักษณ์ที่xSQL เปรียบเทียบ SchemaและxSQL ข้อมูลเปรียบเทียบ คุณสามารถซิงโครไนซ์สกีมากับการเปรียบเทียบสคีมาก่อนแล้วจึงคัดลอกข้อมูล

ข้อจำกัดความรับผิดชอบ: ฉันมีส่วนเกี่ยวข้องกับ xSQL

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