ฐานข้อมูลเซิร์ฟเวอร์ SQL ค้างอยู่ในสถานะคืนค่า


79

ฉันมีเซิร์ฟเวอร์ Sharepoint เรามีปัญหากับเครื่องมือสำรองของเราและตอนนี้ฐานข้อมูลของฉันบางส่วนติดอยู่ในสถานะการกู้คืน!

ภาพแสดงฐานข้อมูลการเรียกคืน

เป็นไปได้หรือไม่ที่จะหยุดกระบวนการกู้คืน และฉันจะมั่นใจได้อย่างไรว่าความสมบูรณ์ของฐานข้อมูลไม่ได้ถูกบุกรุก?

คำตอบ:


129

อาจเกิดจากสคริปต์การเรียกคืนที่เพิ่มWITH NORECOVERYพารามิเตอร์เพื่อให้ฐานข้อมูลพร้อมสำหรับบันทึกธุรกรรมใช้หลังจากการคืนค่า

ฐานข้อมูลกำลังรอไฟล์บันทึกธุรกรรมล่าสุด

คุณสามารถ:

  1. ใช้บันทึกธุรกรรมล่าสุดโดยใช้RESTORE LOG database_name FROM backup_device WITH RECOVERY;... หรือ
  2. กู้คืนฐานข้อมูลอีกครั้ง แต่คราวนี้ใช้... WITH RECOVERY;... หรือ
  3. บังคับให้ฐานข้อมูลออกจากโหมดการกู้คืนโดยดำเนินการ: RESTORE DATABASE YourDb WITH RECOVERY;

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

ดูรายละเอียดนี้:


เมื่อสิ่งเหล่านี้ไม่ทำงานให้ดูdba.stackexchange.com/questions/11175/ … - อีกครั้งคำเตือนมากมายหากคุณไม่ทราบว่าคุณกำลังทำอะไรและเข้าใจถึงความเสี่ยงของการสูญหายของข้อมูล แต่ถ้าคุณผูกเซิร์ฟเวอร์ที่ไม่ได้ใช้งานจริงคุณจะได้รับการสำรองข้อมูลที่ดีเพื่อทำการกู้คืนใหม่และคุณสามารถเริ่ม SQL ใหม่บนเซิร์ฟเวอร์ดังกล่าวได้
NateJ

6
"บังคับให้ฐานข้อมูลออกจากโหมดการกู้คืนโดยดำเนินการ: กู้คืนฐานข้อมูลของคุณด้วยการกู้คืน" 20 นาทีของการเกาหัวและเริ่มบริการใหม่แล้วแก้ไขด้วยหนึ่งซับ ขอบคุณ!
Echilon

2
ฉันติดอยู่กับสถานการณ์เดียวกันกับกล่อง dev ของฉัน ตัวเลือก 3 ทำงานได้อย่างมีเสน่ห์!
Moiz Tankiwala

ฉันพยายามกู้คืนฐานข้อมูลจาก. bak เป็นฐานข้อมูลใหม่แต่ลืมเปลี่ยนชื่อไฟล์บนดิสก์ การกู้คืนล้มเหลวแม้ว่าจะไม่ใช่เพราะไฟล์ถูกใช้งานโดยฐานข้อมูลที่มีอยู่ แต่มีข้อผิดพลาดอื่น ๆ สิ่งนี้ทำให้เกิดความสับสนกับฐานข้อมูลที่มีอยู่ (ติดอยู่ในสถานะการกู้คืน) # 3 นำกลับมาออนไลน์ในไม่กี่วินาทีและตรวจสอบข้อมูลทุกอย่างดูดี ขอบคุณ!
CoDEmanX

44

สคริปต์ T-SQL อย่างง่ายสำหรับการแก้ปัญหานี้:

เขียนสคริปต์นี้ในหน้าต่างแบบสอบถามใหม่และดำเนินการ:

RESTORE DATABASE [DataBase Name] WITH RECOVERY;

เรียกคืนฐานข้อมูล [database_name] พร้อมการกู้คืน .... ทำงานได้สมบูรณ์แบบสำหรับฉัน ขอขอบคุณ!

10
ระวังให้มากที่จะเข้าใจความหมายของสิ่งนั้น หากฐานข้อมูลกำลังรอการคืนค่าบันทึกซึ่งอาจทำให้ข้อมูลสูญหายได้
David Spillett

2
ไม่สามารถทำงานได้เนื่องจากข้อผิดพลาด"ไม่สามารถกู้คืนฐานข้อมูลได้เนื่องจากบันทึกไม่ได้กู้คืน"
Ian Boyd

0

ฉันเพิ่งมีสถานการณ์นี้และการรักษาที่น่าแปลกใจมาก:

ALTER DATABASE DBName SET ONLINE;

เห็นได้ชัดว่าการเรียกคืน NetBackup ที่ทำให้มันอยู่ในสถานะที่แปลก ไม่มีวิธีแก้ปัญหาอื่นทำงาน (แม้ว่าฉันยังไม่ได้ลองรีสตาร์ทบริการ SQL Server)

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


นี่คือคำตอบที่ไม่ถูกต้องสำหรับคำถามนี้ถ้าคุณพยายามตั้งค่าฐานข้อมูลที่อยู่ใน 'การกู้คืน' แบบออนไลน์คุณจะได้รับข้อผิดพลาด "ไม่อนุญาตให้เปลี่ยนฐานข้อมูลในขณะที่ฐานข้อมูลอยู่ในสถานะการเรียกคืน"
James Jenkins

บางทีคุณอาจไม่คุ้นเคยกับวิธีการของ StackOverflow บางครั้งเราตอบคำถามที่แตกต่างจากการโพสต์เล็กน้อย สิ่งนี้ให้คุณค่าเพราะคนมักจะมีคำถามคล้ายกับพวกเขาหลังจากค้นหาทางออนไลน์ เกี่ยวกับการเรียกร้องของคุณเกี่ยวกับความจริงALTER DATABASEไม่ได้รับการอนุญาตให้ผมมั่นใจว่าในกรณีของฐานข้อมูลในความเป็นจริงการแสดงเป็นรัฐในการฟื้นฟูและการใช้SET ONLINEในความเป็นจริงทำงาน ดังนั้นตระหนักว่าคุณกำลังโทรหาฉันผิดหรือโกหก นั่นคือสิ่งที่คุณต้องทำจริง ๆ เมื่อมีทางเลือกอื่นหรือไม่?
ErikE

@JamesJenkins และทางเลือกนั้นคืออะไร? ทางเลือกคือสมมติฐานที่ฐานข้อมูลสามารถแสดงในการกู้คืนสถานะ แต่ไม่สามารถกู้คืนได้จริง หรืออาจเป็นขั้นตอนสุดท้ายของการกู้คืนโดยการกู้คืนเสร็จสมบูรณ์จริง ๆ เพื่อให้สามารถตั้งค่าเป็นONLINEสถานะจริงได้ เรื่องสั้นยาวฉันคิดว่าความคิดเห็นและ downvote ของคุณอยู่นอกบรรทัดสำหรับเว็บไซต์นี้และข้อมูลของคุณไม่ถูกต้องตามความเป็นจริงเพราะมันไม่ผ่านการรับรองอย่างถูกต้องกับข้อมูลที่ฉันได้นำเสนอ
ErikE

0

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

ตัวอย่าง:

RESTORE DATABASE YourDB FROM DISK= 'C:\\Data\\YourDBBackup.bak'
WITH RECOVERY
GO

เรามาดูประเด็นสำคัญเกี่ยวกับการคืนสภาพโดยไม่ต้องกู้คืน

  • ฐานข้อมูลไม่สามารถใช้งานได้
  • ยังคงอยู่ในโหมดกู้คืน
  • ลำดับการกู้คืนถัดไปสามารถทำได้
  • ไม่ย้อนกลับธุรกรรมที่ไม่มีข้อผูกมัดใด ๆ

คืนค่าด้วย NoRecovery

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

ตัวอย่าง:

RESTORE DATABASE YourDB FROM DISK - 'C:\\Data\\Backup_part1.bak' 
WITH NORECOVERY
GO

แล้ว:

RESTORE LOG YourDB FROM DISK = 'C:\\Data\\BackupLog-part2.trn'
WITH RECOVERY
GO

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