Cơ sở dữ liệu máy chủ SQL bị kẹt trong trạng thái khôi phục


79

Tôi có một máy chủ Sharepoint. Chúng tôi đã gặp sự cố với công cụ sao lưu của mình và bây giờ một số cơ sở dữ liệu của tôi bị kẹt trong trạng thái khôi phục!

Hình ảnh hiển thị khôi phục cơ sở dữ liệu

Có thể dừng quá trình khôi phục? và ngoài ra, làm thế nào tôi có thể đảm bảo tính toàn vẹn của cơ sở dữ liệu không bị xâm phạm?

Câu trả lời:


129

Điều này có thể do tập lệnh khôi phục thêm WITH NORECOVERYtham số, để làm cho cơ sở dữ liệu sẵn sàng cho nhật ký giao dịch được áp dụng sau khi khôi phục.

Cơ sở dữ liệu hiện đang chờ tệp nhật ký giao dịch mới nhất.

Bạn có thể:

  1. Áp dụng nhật ký giao dịch mới nhất , sử dụng RESTORE LOG database_name FROM backup_device WITH RECOVERY;... hoặc
  2. Khôi phục lại cơ sở dữ liệu, nhưng lần này sử dụng ... WITH RECOVERY;... hoặc
  3. Buộc cơ sở dữ liệu ra khỏi chế độ khôi phục bằng cách thực hiện: RESTORE DATABASE YourDb WITH RECOVERY;

Trước khi bạn làm điều này, hãy chắc chắn rằng bạn hiểu ý nghĩa của các tùy chọn này. Bạn có thể gây mất dữ liệu nếu không cẩn thận.

Xem điều này để biết chi tiết:


Khi những thứ đó không hoạt động, hãy xem dba.stackexchange.com/questions/11175/ cấp - một lần nữa, RẤT NHIỀU CẢNH BÁO CỦA DOOM nếu bạn không biết bạn đang làm gì và hiểu toàn bộ nguy cơ mất dữ liệu. Nhưng nếu bạn đang bị ràng buộc trên một máy chủ không sản xuất, bạn đã có các bản sao lưu tốt để thực hiện khôi phục mới và bạn có thể đủ khả năng khởi động lại SQL trên máy chủ nói trên, nó hoạt động.
NateJ

6
"Buộc cơ sở dữ liệu ra khỏi chế độ khôi phục bằng cách thực hiện: RESTORE DATABASE YourDb VỚI RECOVERY". 20 phút dịch vụ gãi đầu và khởi động lại, sau đó cố định bằng một lớp lót. Cảm ơn!
Echilon

2
Tôi đã bị mắc kẹt với tình huống tương tự hộp dev của tôi. Lựa chọn 3 làm việc như một cơ duyên!
Moiz Tankiwala

Tôi đã cố gắng khôi phục DB từ .bak thành DB mới , nhưng quên thay đổi tên tệp trên đĩa. Khôi phục thất bại, mặc dù không phải vì các tệp được sử dụng bởi cơ sở dữ liệu hiện có, nhưng một số lỗi khác. Điều này làm rối tung DB hiện tại (bị kẹt trong trạng thái khôi phục). # 3 đưa nó trở lại trực tuyến trong một giây và kiểm tra dữ liệu mọi thứ đều ổn. Cảm ơn!
CoDEmanX

44

Tập lệnh T-SQL đơn giản để giải quyết vấn đề này:

viết tập lệnh này trên cửa sổ Truy vấn mới và thực hiện:

RESTORE DATABASE [DataBase Name] WITH RECOVERY;

RESTORE DATABASE [cơ sở dữ liệu] với việc thu hồi .... Làm việc hoàn hảo với tôi. Cảm ơn bạn!

10
Hãy rất cẩn thận để hiểu ý nghĩa của điều đó. Nếu DB đang chờ khôi phục nhật ký có thể dẫn đến mất dữ liệu đáng kể.
David Spillett

2
Không hoạt động được do lỗi, "Cơ sở dữ liệu không thể được phục hồi do nhật ký không được khôi phục."
Ian Boyd

0

Tôi vừa gặp tình huống này, và cách chữa trị khá bất ngờ:

ALTER DATABASE DBName SET ONLINE;

Rõ ràng việc khôi phục NetBackup đã phá vỡ nó trong một trạng thái kỳ lạ. Không có giải pháp nào khác hoạt động (mặc dù tôi chưa thử khởi động lại dịch vụ SQL Server)

Tuy nhiên, tôi sẽ cẩn thận với cơ sở dữ liệu, vì về mặt lý thuyết, khi khôi phục bắt đầu, sau đó thất bại, bạn có thể đã làm hỏng dữ liệu. Dù sao tôi cũng sẽ khôi phục lại cơ sở dữ liệu, vì vậy nó không thành vấn đề với tôi.


Đây là câu trả lời sai cho câu hỏi này, nếu bạn cố gắng đặt cơ sở dữ liệu trong 'Khôi phục' Trực tuyến, bạn sẽ gặp lỗi "ALTER DATABASE không được phép trong khi cơ sở dữ liệu ở trạng thái Khôi phục."
James Jenkins

Có lẽ bạn không quen với cách trên StackOverflow, đôi khi chúng tôi trả lời các câu hỏi hơi khác so với câu hỏi được đăng. Điều này cung cấp giá trị vì mọi người thường tìm đến các câu hỏi tương tự như của họ sau khi tìm kiếm trực tuyến. Về yêu cầu thực tế của bạn về việc ALTER DATABASEkhông được phép, tôi đảm bảo với bạn rằng trong trường hợp của tôi, cơ sở dữ liệu trên thực tế hiển thị như ở trạng thái khôi phục và sử dụng SET ONLINEtrên thực tế đã hoạt động . Vì vậy, nhận ra rằng bạn đang gọi tôi nhầm hoặc nói dối. Đó có phải là những gì bạn thực sự cần phải làm khi có sẵn một sự thay thế?
ErikE

@JamesJenkins Và sự thay thế đó là gì? Thay thế là giả thuyết rằng một cơ sở dữ liệu có thể hiển thị trong trạng thái khôi phục trạng thái nhưng không thực sự được khôi phục. Hoặc nó có thể là bước cuối cùng của việc khôi phục, với việc khôi phục thực sự hoàn thành để nó thực sự có thể được đặt thành ONLINEtrạng thái. Câu chuyện dài quá ngắn, tôi nghĩ rằng bình luận và downvote của bạn không phù hợp với trang web này và thông tin của bạn thực sự không chính xác vì nó không đủ điều kiện phù hợp với dữ liệu tôi đã trình bày.
ErikE

0

Như chúng ta đã biết, tùy chọn khôi phục cơ sở dữ liệu mặc định là với Recovery, đảm bảo cơ sở dữ liệu có sẵn và Trực tuyến để sử dụng sau khi hoàn tất khôi phục cơ sở dữ liệu.

Thí dụ:

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

Chúng ta hãy xem những điểm quan trọng về Khôi phục mà KHÔNG khôi phục

  • Cơ sở dữ liệu không thể sử dụng được
  • Vẫn trong chế độ khôi phục
  • Trình tự khôi phục tiếp theo có thể được thực hiện
  • Không phục hồi bất kỳ giao dịch không được cam kết nào

Khôi phục với NoRecovery

Tùy chọn này đặc biệt được sử dụng khi nhiều bản sao lưu được khôi phục. Điều đó có nghĩa là, khi bạn thực thi lệnh khôi phục với tùy chọn norecovery, điều đó có nghĩa là cơ sở dữ liệu không được phát hành cho người dùng cho đến khi bản sao lưu cuối cùng được khôi phục. Với lần sao lưu cuối cùng, tùy chọn Recovery được sử dụng và cơ sở dữ liệu sẽ trực tuyến.

Thí dụ:

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

Và sau đó:

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

1
Bạn có thể có một lỗi đánh máy trong câu trả lời của bạn. Phần được đánh dấu ... về Khôi phục với Khôi phục liệt kê tất cả các tùy chọn áp dụng cho RESTORE ...WITH NORECOVERYtùy chọn. Bạn có thể kiểm tra lại không?
hot2use
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.