Xác định nguyên nhân gốc tại sao cơ sở dữ liệu bị kẹt trong trạng thái RESTORING


10

Tôi biết có những câu hỏi giải quyết vấn đề cơ sở dữ liệu bị kẹt trong RESTORINGtrạng thái và đã sử dụng các giải pháp đó để tự đưa cơ sở dữ liệu trở lại trực tuyến, nhưng kịch bản của tôi có hơi khác.

Tôi có khôi phục tự động bằng cách sử dụng tập lệnh Powershell để khôi phục bản sao sản xuất cho phiên bản DEV. Các tập lệnh không thay đổi trong khoảng một năm và đôi khi quá trình khôi phục kết thúc nhưng cơ sở dữ liệu được khôi phục bị kẹt ở RESTORINGtrạng thái (đôi khi tập lệnh hoạt động tốt, đôi khi nó bị lỗi như thế này).

Mỗi lần nếu tôi tự chạy lại quy trình thì nó hoạt động hoặc nếu tôi khôi phục thủ công cơ sở dữ liệu từ giao diện người dùng của SSMS hoặc thông qua T-SQL thì nó hoàn thành mà không gặp vấn đề gì.

Tôi đã tìm thấy câu trả lời được khuyến nghị để chạy CHECKDBtrên DB được khôi phục nhưng không có gì xuất hiện do nguyên nhân của vấn đề này.

Vì các tập lệnh khôi phục khôi phục bản sao lưu đầy đủ của cơ sở dữ liệu và sử dụng một "WITH RECOVERY"tùy chọn, tôi đang cố gắng tìm hiểu điều gì có thể dừng quá trình khôi phục, mặc dù tôi thực sự đang khôi phục nó bằng cách sử dụng "WITH RECOVERY".

Bất kỳ đề xuất nào cũng thực sự được đánh giá cao vì tôi cố gắng hiểu tại sao điều này lại xảy ra theo thời gian.

Tôi rất muốn giải quyết nguyên nhân gốc rễ của vấn đề thay vì điều trị các triệu chứng, đó là khôi phục lại DB một cách thủ công một lần nữa.

Cập nhật:

Github Gist như @Brent khuyên dùng - tại đây .


1
Bạn có thể nhận được câu trả lời từ nhật ký SQL Server và trình xem sự kiện, bạn đã kiểm tra chưa? Có vấn đề không gian nào đó xảy ra bởi vì điều đó có thể khiến trạng thái khôi phục bị kẹt. Bạn có xác minh tính toàn vẹn sao lưu trước khi khôi phục? Hệ thống lưu trữ của bạn như thế nào
Shanky

@Shanky Tôi sẽ xem xét những điều đó, mặc dù tôi không có quyền truy cập trực tiếp vào thông tin đó (tôi cần phải làm quen với quản trị viên SAN của mình). Tính toàn vẹn sao lưu được thiết lập để được kiểm tra cả khi sao lưu và khi ghi vào đĩa.
Radu Gheorghiu

1
Lỗi máy chủ SQL nói gì? Hãy thử chạy EXEC sys.xp_readerrorlog 0,1;- tìm thông báo trong khoảng thời gian thao tác khôi phục.
Max Vernon

@MaxVernon Nhật ký lỗi từ khi khôi phục xảy ra . Tôi đã kiểm tra thông báo lỗi và có vẻ như khuyên bạn nên kiểm tra dung lượng đĩa, rất nhiều. Tôi sẽ đào sâu hơn và xem những gì tôi có thể tìm thấy, nhưng trong một cái nhìn nhanh chóng, điều này có thể mở rộng khá nhiều và sẽ khiến tôi nhìn vào rất nhiều thứ .
Radu Gheorghiu

Câu trả lời:


8

Dao cạo của Occam gợi ý bắt đầu với điều hiển nhiên:

Nếu tập lệnh của bạn đôi khi để lại một cơ sở dữ liệu ở trạng thái khôi phục, sau đó gỡ lỗi tập lệnh.

Bắt đầu bằng cách đăng nhập những gì bạn đang làm trong một bảng hoặc một tệp. Sau đó, khi bạn kết thúc với cơ sở dữ liệu ở trạng thái khôi phục, hãy quay lại nhật ký của bạn để xem điều gì đã xảy ra. (Nếu bạn muốn có một đôi mắt thứ hai từ cộng đồng, hãy thử tải lên tập lệnh của bạn dưới dạng Github Gist, nhưng hãy nhớ rằng nó càng lớn thì càng khó để mọi người phát hiện ra lỗi.)

Nếu bạn không muốn làm điều đó, thì hãy thử chạy theo dõi Profiler hoặc Extended Events để theo dõi các sự kiện khôi phục, nhưng được cảnh báo - nó khó hơn so với vẻ ngoài của nó. (Đọc các bình luận trên bài đăng đó để biết thêm nhiều ý tưởng người đọc mà họ đã thử và thất bại.)


Cảm ơn Brent, đây là một số hướng dẫn tốt! Tôi sẽ quay lại với bản cập nhật khi tôi có thêm thông tin, hiện tại DB vẫn ổn, tôi sẽ thấy điều gì xảy ra khi quá trình chạy lại vào sáng mai.
Radu Gheorghiu
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.