ปรับลดรุ่นจาก SQL Server 2008 เป็น 2005


32

ไฟล์ฐานข้อมูลที่สร้างขึ้นโดยใช้ SQL 2008 ไม่สามารถทำงานร่วมกับปี 2005 มีวิธีแก้ไขหรือไม่?


อย่าลืมส่งออกการเข้าสู่ระบบเซิร์ฟเวอร์ด้วย
StanleyJohns

เป็นเพราะคุณกำลังพัฒนาในปี 2008 แต่เซิร์ฟเวอร์ที่ใช้งานจริงของคุณยังอยู่ในปี 2005 วิธีการแก้ปัญหาใด ๆ ที่คุณมอบให้จะชะลอการหลีกเลี่ยงไม่ได้ในขณะเดียวกันก็ทำให้ชีวิตของคุณมีความสุขเพราะคุณจะต้องทำการลดระดับเหล่านี้เป็นประจำ
datagod

คำตอบ:


16

ไม่จำเป็นต้องใช้เครื่องมือของบุคคลที่สาม SQL Server 2008 Management Studio ทำให้เรามีเครื่องมือที่มีประสิทธิภาพมากในการแปลงฐานข้อมูลเพราะพวกเขาเพิ่มตัวเลือก "ข้อมูลสคริปต์" ให้กับตัวช่วยสร้าง

เพียงคลิกขวาที่ฐานข้อมูลใน SQL2008 SSMS และไปที่งานจากนั้น "สร้างสคริปต์"

เดินผ่านตัวช่วยสร้างตรวจสอบให้แน่ใจว่าได้เลือก "จริง" สำหรับ "ข้อมูลสคริปต์" ภายใต้ตัวเลือกตาราง / มุมมอง เลือกวัตถุทั้งหมดจากนั้นเรียกใช้สคริปต์ที่สร้างบนเซิร์ฟเวอร์ 2005 (โปรดทราบว่าสคริปต์ที่สร้างขึ้นอาจมีขนาดใหญ่หากฐานข้อมูลดั้งเดิมมีขนาดใหญ่มาก!)

โปรดทราบว่าคุณสามารถเรียกใช้ตัวช่วยสร้างกับเซิร์ฟเวอร์ SQL2005 เพื่อแปลงฐานข้อมูล SQL2005 เป็น SQL2000 (คุณต้องใช้เครื่องมือ 2008 ที่ติดตั้งบนเวิร์กสเตชันของคุณ)


4
ไม่มีความผิด แต่นี่เป็นวิธีแก้ปัญหาไม่ได้ถ้าฐานข้อมูลมีขนาดใหญ่ ลองเทคนิคนั้นในตารางที่มีแถวไม่กี่ล้านแถว (และคิดว่า varchar (สูงสุด) เป็นประเภทข้อมูลของคอลัมน์เดียว) และถ้า Management Studio จะสามารถเปิดและแยกไฟล์นี้คุณจะมีความสุข แต่ฉัน แน่ใจว่าจะไม่เปิดมันจะผิดพลาด ขออภัยที่ไม่ใช่วิธีแก้ปัญหานี้ยกเว้นว่า db นั้นเล็กมาก
แมเรียน

3
แน่นอนว่าถ้าฐานข้อมูลมีขนาดใหญ่เกินไปให้เขียนโครงสร้างของฐานข้อมูลออกมาให้ใช้วิธีการที่คุณโปรดปราน (SSIS, BCP, ตัวช่วยสร้างการนำเข้า) เพื่อส่งข้อมูล
BradC

ใน SSMS 11.0 ดูเหมือนจะไม่มีตัวเลือกข้อมูลสคริปต์พร้อมกับโครงสร้าง i.imgur.com/SGkG8oZ.png
jcollum

Ah ตกลงตอนนี้ภายใต้ "ประเภทของข้อมูลสคริปต์" ด้านบนตัวเลือกตาราง / มุมมอง
jcollum

16

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


2
ทั้งนี้ขึ้นอยู่กับปริมาณข้อมูลที่ใช้เวลานาน
jcolebrand

ใช่แน่นอนมันจะ การย้ายฐานข้อมูลขนาดใหญ่ไปยัง SQL Server รุ่นเก่าไม่ใช่เรื่องง่าย
mrdenny

2
ข้อได้เปรียบของ BCP คือจะเร็วกว่าการใช้ข้อมูลสคริปต์ ใช่มันช้า แต่เร็วกว่าตัวเลือกอื่น ๆ
Jeremiah Peschka

15

ไม่มีทางตรงที่ฉันรู้เพื่อลดระดับ DB จากรูปแบบของปี 2008 เป็นปี 2005 น่าเสียดาย

วิธีที่ฉันทำสิ่งนี้ในอดีต (จริง ๆ แล้วกับเซิร์ฟเวอร์ SQL รุ่นเก่า แต่กระบวนการจะเหมือนกัน) คือ:

  1. กู้คืนฐานข้อมูลบนอินสแตนซ์ SQL2008 หากยังไม่เสร็จสิ้น
  2. สร้างฐานข้อมูลเปล่าด้วยโครงสร้างที่ถูกต้อง (ตาราง, ดัชนี, ข้อ จำกัด , มุมมอง, procs, ทริกเกอร์, ... ) บนอินสแตนซ์ของ SQL2005 หวังว่าคุณสามารถทำได้จากขั้นตอนการสร้างที่มีอยู่และ / หรือซอร์สโค้ดของคุณ แต่ถ้าไม่ใช่คุณสามารถใช้ SQL Server Manager เพื่อสร้างสคริปต์สำหรับทุกอย่างใน 2005 DB และเรียกใช้ผลลัพธ์ในหนึ่งช่องว่างในอินสแตนซ์ 2008
  3. ให้ทั้งสองกรณีสามารถดูแต่ละอื่น ๆ (เช่นมีไฟร์วอลล์ไม่มีการปิดกั้นการเชื่อมต่อถ้ากรณีที่อยู่บนเครื่องที่แตกต่าง) และเชื่อมโยงพวกเขาโดยใช้sp_addlinkedserver
  4. คัดลอกข้อมูลทั้งหมดจากฐานข้อมูลหนึ่งไปยังอีกฐานข้อมูลหนึ่ง หากไม่มีข้อ จำกัด กุญแจต่างประเทศและปัญหาที่คล้ายกันในการกระตุ้นให้กังวลเกี่ยวกับคุณเพียงแค่เชื่อมโยงฐานข้อมูลเข้าด้วยกันและเลื่อนเคอร์เซอร์ไปที่รายการตาราง (เลือกจาก sys.objects) และเรียกใช้
    INSERT destinationserver.destinationdb.schema.table SELECT * FROM sourcedb.schema.table
    (หรือINSERT schema.table SELECT * FROM sourceserver.sourcedb.schema.tableถ้าคุณเชื่อมโยงอินสแตนซ์ )
    สำหรับแต่ละตาราง หากคุณมีความสอดคล้องระหว่างตารางบังคับใช้ข้อ จำกัด และทริกเกอร์แน่นอนว่าคุณจะต้องฉลาดกว่าเกี่ยวกับการจัดลำดับการดำเนินการโดยเฉพาะอย่างยิ่งถ้าคุณมีข้อ จำกัด ตามวงจรเช่นตารางที่มีข้อ จำกัด ตามตัวของมันเอง ข้อมูลเป็นตัวอย่างที่เป็นไปได้)

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

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


1
-1 เพราะสิ่งนี้ไม่มีประสิทธิภาพจริง ๆ (เลือก * เป็นจาก) เปรียบเทียบกับการถูกใจของ BCP
jcolebrand

@ jcolebrand มีประสิทธิภาพเพียงพอ แม้ว่าเทคนิคเป็นสิ่งที่ฉันเคยทำงาน
David Spillett

มันเป็นระบบที่ยุติธรรมฉันแค่คิดว่าฉันจะรวมไว้ในบัญชีของผู้อ่านในอนาคตที่นี่ ตอนนี้คุณมี upvotes แล้วเพื่อไม่ให้เป็นปัญหา ;)
jcolebrand

7

ฉันต้องเผชิญกับสถานการณ์ที่คล้ายคลึงกันและใช้ Database Publishing Wizard กับสคีสคริปต์และข้อมูลสำหรับ SQL Server 2005 จากฐานข้อมูล SQL Server 2008

บริการโฮสต์เว็บเซิร์ฟเวอร์ SQL (และชุดเครื่องมือ)

ตัวช่วยสร้างการเผยแพร่ฐานข้อมูล


1

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

โชคดี!

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