A Non-DBA ถาม: วิธีการคัดลอก / ย้ายอินสแตนซ์ SQL Server ไปยังเซิร์ฟเวอร์อื่นผ่านทาง Backup / Restore อย่างไม่ลำบาก


11

เราเพิ่งมีเซิร์ฟเวอร์ใหม่ดังนั้นฉันต้องการคัดลอกอินสแตนซ์ SQL Server 2008 ที่มีอยู่ไปจากกล่องฐานข้อมูลเก่า

ปกติแล้วฉันจะทำสิ่งนี้โดยการคัดลอก. mdf และล็อกไฟล์และแนบไฟล์เหล่านั้น แต่ฉันไม่สามารถใช้ dbs off line ได้เนื่องจากพวกเขาใช้งานตลอด 24 ชั่วโมงทุกวันดังนั้นฉันจึงสำรองฐานข้อมูลและเรียกคืนไฟล์ใหม่ เครื่อง อย่างไรก็ตามผมได้จบลงด้วยสองสามประเด็นหนึ่งของพวกเขาที่เกี่ยวข้องกับผู้ใช้กำพร้า ดังนั้นสิ่งที่ฉันกำลังมองหาคือกระบวนการที่ไม่ปลอดภัยในการเคลื่อนย้ายทุกอย่างไปด้วยความยุ่งยาก / รำคาญ / ปวดหัวน้อยที่สุด ฉันเป็น. dev ที่มีจำนวน SQL อยู่พอสมควร แต่การทำงานภายในของ SQL Server ส่วนใหญ่เป็นเรื่องลึกลับสำหรับฉันและฉันพบว่าเอกสาร MS เจ็บปวดต่อการอวนลาก

กรุณาช่วย.


1
คุณสามารถค้นหาความคิดบางอย่างในเรื่องนี้คำถามก่อนหน้านี้ แต่คำตอบก่อนหน้านี้เป็นคำอธิบายที่ค่อนข้างสวย ฉันคิดว่าความคิดที่ดีที่สุดคือการสร้างมิเรอร์และทำลายมันหรือ Log shipping (สามารถทำได้จากตัวช่วยสร้าง) สำหรับ dbs ทั้งหมดและเพียงกู้คืนการสำรองข้อมูลบันทึกที่จำเป็นเพิ่มเติม แต่ถ้าคุณบอกว่าคุณไม่ใช่ DBA ดังนั้นวิธีสำรองอาจดีกว่า
Marian

คำตอบ:


10

หากคุณไม่สามารถใช้ฐานข้อมูลออฟไลน์ได้คุณจะต้องสำรองข้อมูล / คืนค่า ฉันอยากจะแนะนำต่อไปนี้:

  1. ติดตั้ง SQL 2008 บนกล่องใหม่โดยใช้โครงสร้างไฟล์เดียวกับกล่องเก่าสำหรับไฟล์ MDF และ LDF
  2. ใช้การสำรองข้อมูลของฐานข้อมูลทั้งหมดในกล่องเก่า
  3. กู้คืนมาสเตอร์จากกล่องเก่าไปยังกล่องใหม่โดยที่ SQL เริ่มทำงานในโหมดผู้ใช้คนเดียว คืนค่าวิธีการหลัก
  4. กู้คืนแต่ละฐานข้อมูลจากกล่องเก่าไปยังกล่องใหม่ด้วยตัวเลือก NORECOVERY เพื่อให้สามารถใช้การสำรองข้อมูล Diff หรือ T-log ในอนาคตได้
  5. กู้คืน msdb จากกล่องเก่าไปยังกล่องใหม่

หากคุณสร้างและกำหนดค่ากล่องใหม่ให้ดูเหมือนกับกล่องเก่าคุณจะมีความยุ่งยากน้อยที่สุด

ฉันไม่รู้ว่าฐานข้อมูลของคุณใหญ่แค่ไหนดังนั้นวิธีนี้อาจใช้เวลานาน สิ่งที่ง่ายที่สุดที่จะทำคือปิดกล่องเก่าและคัดลอกไฟล์ MDF และ LDF แล้ว (หลังจากคืนค่าต้นแบบ) คุณจะต้องรีสตาร์ท SQL เพื่อให้ฐานข้อมูลของคุณออนไลน์ แต่คุณระบุว่าไม่ใช่ตัวเลือกเนื่องจากฐานข้อมูลไม่ได้รับอนุญาตให้ออฟไลน์


3
อย่าลืมคัดลอกการเปลี่ยนแปลงข้อมูลใด ๆ ที่เกิดขึ้นหลังจากทำการสำรองข้อมูล คุณสามารถทำการสำรองข้อมูลต่าง ๆ หรือทำการสำรองข้อมูล tlog และนำไปใช้กับเซิร์ฟเวอร์ใหม่หลังจากเสร็จสิ้น แต่ก่อนที่คุณจะสลับ
Eric Humphrey - lotsahelp

จุดดีฉันลืมที่จะพูดถึงเช่นกัน บางทีฉันควรจะมีการกำหนดค่ามิร์เรอร์ db ซึ่งอาจแตกได้ในภายหลัง
SQLRockstar

1
ฉันคิดว่ามีบางคนมีบทความมากมายเกี่ยวกับวิธีต่างๆในการโยกย้ายเซิร์ฟเวอร์ นอกจากนี้ยังเป็นบทความเกี่ยวกับการถ่ายโอนข้อมูลเข้าสู่ระบบไปยังเซิร์ฟเวอร์ใหม่: support.microsoft.com/kb/246133
Eric Humphrey - lotsahelp

8

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

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

    CREATE ENDPOINT endpoint1
    STATE=STARTED AS TCP(LISTENER_PORT = 5222, LISTENER_IP = 192.168.1.5) 
    FOR DATA_MIRRORING(ROLE = PARTNER, AUTHENTICATION = WINDOWS NEGOTIATE, ENCRYPTION = REQUIRED ALGORITHM RC4)
  4. ตั้งค่าการมิเรอร์บนมิรเรอร์โดยชี้ไปที่หลัก:

    ALTER DATABASE GaiusMirrorDB SET PARTNER = 'TCP://192.168.1.5:5222'
    go
    EXEC sys.sp_dbmmonitoraddmonitoring
    go
  5. และบนหลักให้ชี้ไปที่มิรเรอร์ (แค่ชื่อฐานข้อมูลและที่อยู่ IP อื่น

  6. จากนั้นเมื่อถึงเวลาเพียงสลับไปที่กระจกหลัก:

    ALTER DATABASE GaiusDB SET PARTNER FAILOVER
    GO

หมายเหตุ: ฉันสมมติว่าเซิร์ฟเวอร์ทั้งสองนี้อยู่ในเครือข่ายเดียวกันดังนั้นจะสามารถใช้งานในโหมดซิงโครนัสได้ หากนี่เป็นลิงค์ WAN ให้ใช้โหมด async

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