SQL Server hiển thị cơ sở dữ liệu trong phục hồi


23

Hôm nay, sau khi mất điện, một cơ sở dữ liệu (có Recovery: full) hiển thị "Đang khôi phục" trong SSMS. Vì thế:

myDatabase (Đang khôi phục) (trạng thái cơ sở dữ liệu: recovery, Shutdown)

Sau khi kết thúc, "quá trình khôi phục" cơ sở dữ liệu hiển thị tên myDatabase mà không có "(Đang khôi phục)". Tôi nghĩ rằng vấn đề đã được giải quyết, nhưng nó đã không xảy ra.

Khi tôi khởi động ứng dụng sử dụng cơ sở dữ liệu đó, văn bản bổ sung "(Đang khôi phục)" xuất hiện lại bên cạnh tên cơ sở dữ liệu của tôi.

Tôi đợi cho đến khi "quá trình phục hồi" kết thúc và sau đó tôi lấy cơ sở dữ liệu ngoại tuyến và đưa nó trở lại trực tuyến.

Tôi khởi động lại máy chủ, khởi động lại máy tính và khi ứng dụng của tôi đang chạy, văn bản bổ sung lại xuất hiện. Trong SQL Server, thông báo "Khởi động cơ sở dữ liệu 'myDatabase'" xuất hiện vài lần. Có vẻ như cơ sở dữ liệu đang hoạt động vì tôi có thể chèn dữ liệu, nhưng trạng thái đang cho thấy điều gì đó xảy ra.

Nhật ký máy chủ không hiển thị bất cứ điều gì thú vị. Điều bất thường duy nhất là tôi có 30 mục "Khởi động cơ sở dữ liệu 'myDatabase'".

Tôi biết rằng khi máy chủ khởi động, mọi cơ sở dữ liệu đều được phục hồi trước khi nó sẵn sàng để sử dụng. Nhưng trong trường hợp của tôi, cơ sở dữ liệu trực tuyến sau đó hiển thị "myDatabase (Đang khôi phục)". Nếu tôi đóng ứng dụng, cơ sở dữ liệu sẽ chuyển sang Trạng thái: Bình thường. Điều này khiến tôi điên mất.

Tôi thậm chí đã cài đặt một phiên bản mới của SQL Server và đặt cơ sở dữ liệu cũ "myDatabase" vào đó. Vấn đề vẫn xảy ra.

Khi tôi chạy truy vấn này:

SELECT databasepropertyex('nyDatabase', 'STATUS')

Nó cho thấy phục hồi, trực tuyến, nghi ngờ và trở lại trực tuyến và sau đó phục hồi và như vậy.

Câu trả lời:



16

Tôi không chắc chắn nếu điều này sẽ giúp giải quyết vấn đề, nhưng bạn có thể cung cấp cho nó một shot.

Chạy:

RESTORE DATABASE YourDatabase WITH RECOVERY

Xem nếu ở trên mang cơ sở dữ liệu ra khỏi chế độ phục hồi. Nếu nó không thì vấn đề có thể là một cái gì đó khác.

Bạn có thể thử lệnh dưới đây và xem nếu cơ sở dữ liệu bị hỏng?

DBCC CHECKDB ('YourDBname') WITH NO_INFOMSGS, ALL_ERRORMSGS

Nếu nó phát hiện ra tham nhũng, thì bạn có thể muốn sửa chữa cơ sở dữ liệu bằng cách sử dụng DBCC CHECKDB


6

Bất cứ khi nào bạn mang một cơ sở dữ liệu trực tuyến, nó sẽ trải qua một quá trình phục hồi. Tôi có một chút bối rối bởi mặc dù vấn đề của bạn. Bạn có thấy cơ sở dữ liệu đi vào phục hồi bất cứ lúc nào khác ngoài khi cơ sở dữ liệu đang được ngoại tuyến (từ sự cố mất điện ban đầu của bạn hoặc do bạn đã mang nó ngoại tuyến và sau đó trực tuyến trở lại)? Nếu vậy, cơ sở dữ liệu sẽ ngoại tuyến vì một số lý do khác. Tốt nhất để kiểm tra nhật ký máy chủ SQL để xem những gì đang xảy ra.

Bạn cũng nên kiểm tra nhật ký sự kiện Windows xem có lỗi gì không. Cơ sở dữ liệu không nên khởi động và đi vào phục hồi trong các hoạt động bình thường.

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.