SQL Server 2012 คืนค่าการสำรองข้อมูลเป็นชื่อฐานข้อมูลใหม่


16

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

ตอนนี้ฉันเข้าใจแล้ว (ขอบคุณ Aaron Bertrand) ที่สิ่งนี้ไม่ได้เปลี่ยนไปจริง ๆ และในปี 2012 นั้นทำให้ฉันชัดเจนมากขึ้นว่ากลยุทธ์นี้เป็นความคิดที่ไม่ดีตั้งแต่แรก!

ดังนั้นสิ่งที่ฉันต้องทำคือ: สร้างฐานข้อมูลใหม่ 'MyDB_Copy' จากฐานข้อมูลที่มีอยู่ 'MyDB' โดยใช้ไฟล์สำรอง เรามีการสำรองข้อมูลเต็มรูปแบบทุกคืน (.bak) และ TLog ทุก ๆ 15 นาที (.trn) ฉันไม่ต้องการให้ 'MyDB' ที่มีอยู่ได้รับผลกระทบ / สัมผัสเลยเพราะมันเป็น "สด"

หลังจาก MyDB_Copy ถูกสร้างขึ้นจากไฟล์สำรองข้อมูลเต็มรูปแบบหลักฉันต้องคืนค่าข้อมูลสำรอง TLog สองสามโหลเพื่อให้ได้เวลาที่แน่นอน


คุณหรือแอรอนเล่าให้ฟังว่าทำไมเรื่องนี้เป็นความคิดที่เลว หรือลิงก์ไปยังปัญหาที่อธิบายไว้
Thronk

ฉันเชื่อว่ามันเป็นอะไรบางอย่างเกี่ยวกับชื่อแบบลอจิคัลที่ไม่ได้รับการเปลี่ยนแปลงและดังนั้นคุณจะจบลงด้วยสองฐานข้อมูลในสถานที่เดียวกันที่มีชื่อและไฟล์ทางกายภาพที่แตกต่างกัน แต่ชื่อตรรกะแบบเดียวกันซึ่งทำให้เกิดปัญหาสำหรับแผนการบำรุงรักษา บนชื่อโลจิคัล ในสถานการณ์ของฉันฐานข้อมูลที่ถูกเรียกคืน / คัดลอกเหล่านั้นไม่เคยใช้งานมานานกว่าสองสามชั่วโมง แต่ฉันสามารถเห็นได้ว่าทำไมมันจึงไม่ใช่วิธีการที่ยอดเยี่ยม
NateJ

คำตอบ:


18

ตามตัวอย่าง E ในเอกสารให้เปิดหน้าต่างคิวรีใหม่และเรียกใช้:

RESTORE DATABASE MyDB_Copy FROM DISK = 'C:\blahblah\MyDB.bak'
  WITH REPLACE, RECOVERY,
  MOVE 'MyDB' TO 'C:\blahblah\Data\MyDB_Copy.mdf',
---------------------------------------^^^^^
  MOVE 'MyDB_log' TO 'C:\blahblah\Data\MyDB_Copy.ldf';
-------------------------------------------^^^^^

ชื่อโลจิคัลไม่สำคัญ ชื่อฟิสิคัลไฟล์คือ สิ่งนี้ทำให้สมมติฐานเกี่ยวกับชื่อไฟล์โลจิคัลของคุณและมีเพียงสองเท่านั้น วิ่งEXEC MyDB..sp_helpfile;เพื่อให้แน่ใจ

หากคุณต้องการกู้คืนบันทึกให้เปลี่ยนRECOVERYเป็นNORECOVERY:

  WITH REPLACE, NORECOVERY,
----------------^^

จากนั้นคุณสามารถออกชุด:

RESTORE LOG MyDB_Copy FROM DISK = 'C:\blahblah\file1.trn' WITH NORECOVERY;

และสุดท้าย:

RESTORE LOG MyDB_Copy FROM DISK = 'C:\blahblah\fileN.trn' WITH RECOVERY;

หรือถ้าคุณต้องการเพียงส่วนหนึ่งของการเข้าสู่ระบบจนกว่าจะถึงเวลา (ฉันคิดว่าคุณได้ตรวจสอบว่า LSNs และเวลาอยู่ที่ไหนเพื่อให้คุณรู้ว่าคุณต้องการไฟล์ใด)

RESTORE LOG MyDB_Copy FROM DISK = 'C:\blahblah\fileN.trn' WITH 
  STOPAT = '<some point in time Friday>', RECOVERY;

วิธีที่คุณพูดว่าทำงานในรุ่นก่อนหน้าจะไม่ทำงานเว้นแต่ว่าการสำรองข้อมูลจะมาจากเซิร์ฟเวอร์อื่น โดยค่าเริ่มต้นจะพยายามใส่ไฟล์ mdf และ ldf ใหม่ในที่เดียวกันและไม่สามารถทำได้


โอเคนั่นช่วยได้เล็กน้อย ตอนนี้ฉันต้องการคืนค่าไฟล์ TRN จำนวนไม่กี่โหลเพื่อให้ DB กลับสู่สถานะเป็นคืนวันศุกร์ (การสำรองข้อมูลเต็มรูปแบบเกิดขึ้นทุกวันเท่านั้นการสำรองข้อมูล TLog เกิดขึ้นทุก ๆ 15 นาที) ใช้ตัวอย่างของคุณฉันได้รับฐานข้อมูลที่สร้างขึ้นจากไฟล์ BAK หลัก แต่ฉันได้รับข้อผิดพลาดใหม่เมื่อพยายามคำสั่งที่คล้ายกันเพื่อเรียกคืนบันทึก มีข้อความแจ้งว่า "การบันทึกหรือการสำรองข้อมูลส่วนต่างไม่สามารถกู้คืนได้เนื่องจากไม่มีไฟล์ที่พร้อมจะเผยแพร่"
NateJ

@NateJ คุณควรถามคำถามเต็มแล้ว :-)
Aaron Bertrand

1
เยี่ยมยอดฉันกำลังพิมพ์อยู่ตอนนี้! ขอบคุณมากสำหรับความช่วยเหลือของคุณ ฉันรู้สึกอึดอัดใจที่ได้รับตัวแทนด้านลบสองสามคนที่ StackOverflow แต่ถ้าใช้งานได้จะคุ้มค่าดี
NateJ

1
@NateJ คุณควรได้รับการตอบกลับเนื่องจากคำถามถูกลบเมื่อมีการโยกย้าย (หรือจะเป็นในที่สุด) ไม่ใช่ฉัน แต่ฉันสงสัยว่าเป็นเพราะข้อกล่าวหาของคุณที่ทำงานในรุ่นเดียว แต่ไม่ได้ตอนนี้เมื่อเห็นได้ชัดว่าเป็นเพียงความเข้าใจผิดของสิ่งที่เกิดขึ้น ...
Aaron Bertrand

โอ้ฉันได้รับ บางอย่างเช่นเคยทำงาน - ฉันอาจจำไม่ได้ว่าอะไร / อย่างไร แต่ฉันยอมรับว่ามันเข้าใจผิด เพื่อนร่วมงานของฉันสาบานขึ้นและลง แต่ตอนนี้ฉันคิดว่ามันไม่เหมาะสม เราต้องทำสิ่งที่แตกต่างออกไปโดยใช้ GUI ฉันรู้สึกว่าการใช้คำสั่ง / สคริปต์ตามที่คุณแนะนำจะดีกว่าสำหรับเรา :) ตอนนี้กำลังกู้คืนบันทึกสำเร็จแล้ว!
NateJ

0

สิ่งที่คุณต้องทำเพื่อกู้คืนฐานข้อมูลเดียวกันหลาย ๆ ครั้งคือเปลี่ยนชื่อของไฟล์ดิสก์สำหรับฐานข้อมูลนั้น เห็นได้ชัดว่าคุณจำเป็นต้องตั้งชื่อฐานข้อมูลให้กับฐานข้อมูลอื่นใน SQL Server ด้วย ใน SSMS หลังจากคุณเลือกไฟล์. bak สำหรับการกู้คืนและพิมพ์ในชื่อสำหรับฐานข้อมูลแล้วคุณคลิก 'ไฟล์' ในส่วน "เลือกหน้า" ทางด้านซ้ายและเพียงเปลี่ยนชื่อไฟล์ดิสก์

ไชโยดั๊ก

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