Chẩn đoán lỗi Microsoft SQL Server 9001: Nhật ký cho cơ sở dữ liệu không khả dụng


20

Cuối tuần qua, một trang web tôi chạy đã ngừng hoạt động, ghi lại lỗi sau trong Trình xem sự kiện mỗi khi có yêu cầu đến trang web:

ID sự kiện: 9001

Nhật ký cho cơ sở dữ liệu ' tên cơ sở dữ liệu ' không có sẵn. Kiểm tra nhật ký sự kiện cho các thông báo lỗi liên quan. Giải quyết bất kỳ lỗi nào và khởi động lại cơ sở dữ liệu.

Trang web được lưu trữ trên một máy chủ chuyên dụng, vì vậy tôi có thể RDP vào máy chủ và chọc ngoáy. Các LDFtập tin cho cơ sở dữ liệu tồn tại trong C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATAthư mục, nhưng cố gắng làm bất cứ công việc với cơ sở dữ liệu từ kết quả Management Studio trong một hộp thoại thông báo cùng lỗi - 9001: Nhật ký cho cơ sở dữ liệu không có sẵn ...

Đây là lần đầu tiên tôi nhận được lỗi này và tôi đã lưu trữ trang web này (và các trang khác) trên máy chủ web chuyên dụng này trong hơn hai năm nay.

Theo hiểu biết của tôi thì lỗi này chỉ ra tệp nhật ký bị hỏng. Tôi đã có thể đưa trang web trở lại trực tuyến bằng cách tách cơ sở dữ liệu và sau đó khôi phục bản sao lưu từ một vài ngày trước, nhưng mối quan tâm của tôi là lỗi này là một vấn đề nghiêm trọng hơn, cụ thể là lỗi ổ cứng.

Tôi đã gửi email hỗ trợ tại công ty lưu trữ web và đây là câu trả lời của họ:

Dường như không có bất kỳ dấu hiệu nào khác về nguyên nhân trong Nhật ký sự kiện, vì vậy có thể nhật ký đã bị hỏng. Hiện tại tài nguyên của bộ nhớ đang ở mức 87%, điều này cũng có thể có tác động nhưng không thể xảy ra.

Nhật ký chỉ có thể "trở nên bị hỏng?"

Câu hỏi của tôi: các bước tiếp theo tôi nên làm để chẩn đoán vấn đề này là gì? Làm thế nào tôi có thể xác định nếu đây thực sự là một vấn đề phần cứng? Và nếu có, có bất kỳ tùy chọn nào ngoài việc thay thế đĩa không?

Cảm ơn

Câu trả lời:


16

Hơn 99% các vấn đề tham nhũng cơ sở dữ liệu là để làm hệ thống lưu trữ. Một nửa số vấn đề còn lại là do bộ nhớ kém, nửa còn lại là lỗi trong SQL Server.

Vấn đề là nó là một vấn đề lưu trữ.

Nếu nó xảy ra một lần nữa, hãy chạy DBCC CHECKDB dựa trên cơ sở dữ liệu và điều này sẽ cung cấp cho bạn thêm thông tin về tham nhũng và nếu sự cố có thể được khắc phục mà không cần thực hiện khôi phục. Bạn có thể sẽ cần phải mang cơ sở dữ liệu trực tuyến trong chế độ khẩn cấp để chạy checkdb dựa trên cơ sở dữ liệu.

Việc sử dụng bộ nhớ ở mức 87% không liên quan gì đến vấn đề này. SQL Server sẽ chạy bộ nhớ tới 100% (hoặc gần với nó) theo thiết kế.


Cảm ơn những lời đề nghị. Tôi thực sự đã thử làm DBCC CHECKDB, nhưng đã gặp rất nhiều lỗi, bao gồm một lỗi nói rằng nó không thể tìm thấy tệp nhật ký. Nhưng tôi đã không thử đưa DB trực tuyến ở chế độ khẩn cấp.
Scott Mitchell

Thông thường nếu nhật ký giao dịch bị hỏng thì đó là một điều khá tệ. CHECKDB có thể sửa chữa nó, hoặc có thể không, tùy thuộc vào mức độ tham nhũng tồi tệ như thế nào. Nếu bạn có bản sao lưu nhật ký giao dịch (nhà cung cấp của bạn có thể không cho phép những thứ này) thì bạn có thể đã mất gần như không có dữ liệu. Ở cuối đầu ra checkdb sẽ là mức sửa chữa được yêu cầu để sửa các vấn đề với các tệp cơ sở dữ liệu.
mrdenny

Chính xác. Sử dụng bộ nhớ sẽ không có gì để làm với điều này - trừ khi bộ nhớ bị hỏng và chỉ được chuyển xuống đĩa. Dù bằng cách nào, bạn sẽ thấy một số dấu hiệu khác về các vấn đề IO trong nhật ký sự kiện của bạn. Một vài nơi.
Michael K Campbell

Bạn có thể thử chạy một tấm kiểm tra (chkdsk) trên đĩa để xem Windows có thấy vấn đề gì với đĩa không. Odds là bạn sẽ cần phải thay thế đĩa. Tuy nhiên, đó có thể chỉ là một lỗi trong mã của bộ điều khiển đĩa hoặc mã trong BIOS của đĩa. Trong cả hai trường hợp, tôi sẽ xem xét việc thay thế các đĩa và / hoặc bộ điều khiển.
mrdenny

8

Tôi đã có thể giải quyết vấn đề này bằng cách lấy cơ sở dữ liệu ngoại tuyến trong Management Studio sau đó ngay lập tức đưa nó trở lại trực tuyến. dbcc checkdbđã ném lỗi đã được giải quyết sau khi làm điều này. Tôi không thể nói tại sao điều này chỉ làm việc mà nó đã làm việc.


5

Gần đây tôi cũng gặp vấn đề này và sau hàng núi nghiên cứu, nó dường như phổ biến khi cơ sở dữ liệu được đặt thành TỰ ĐỘNG ĐÓNG. Tôi đặt tất cả các cơ sở dữ liệu thành AUTO CLOSE = FALSE. Điều này bắt đầu với một cơ sở dữ liệu sau đó chuyển sang hai cơ sở dữ liệu và cơ sở dữ liệu tiếp theo là tất cả. Tôi chỉ cần khởi động lại Dịch vụ sơ thẩm SQL Server thay vì khôi phục cơ sở dữ liệu. Một cách khác để khắc phục triệu chứng này là lấy cơ sở dữ liệu có vấn đề ngoại tuyến và đưa nó trở lại trực tuyến một lần nữa.


1

MS SQL sẽ lấy nhật ký của cơ sở dữ liệu bị ảnh hưởng ngoại tuyến để tránh hỏng cơ sở dữ liệu. Đó là lý do tại sao bạn nhận được lỗi 9001.

Khi bạn lấy cơ sở dữ liệu bị ảnh hưởng ngoại tuyến / MS SQL sẽ kích hoạt nhật ký cơ sở dữ liệu bị ảnh hưởng cho đến khi xảy ra lỗi.

Một cách khác để giải quyết vấn đề này là thay đổi tùy chọn Auto_Close thành TẮT

http://sqlmag.com/blog/worst-practice-allowing-autoclose-sql-server-database


0

Tôi sẽ đoán / hy vọng rằng bạn đã có một cuộc đột kích vào đĩa cho máy chủ sql của bạn. nếu bạn nghi ngờ vấn đề phần cứng, điều đầu tiên tôi sẽ làm là chạy các công cụ chẩn đoán / bảo trì đột kích của bạn.

điều thứ hai (có thể đồng thời nếu bạn có thể) là chạy dbcc checkdb trên cơ sở dữ liệu (cũng có thể là cơ sở dữ liệu hệ thống của bạn).


0

Ok, bước đầu tiên, tạo bản sao lưu nhật ký và các tệp mdf của bạn sang một ổ đĩa hoàn toàn khác. MAU! (Sao chép tập tin)

Ngoài ra, hãy thử thực hiện sao lưu cơ sở dữ liệu đầy đủ.

Tiếp theo, hãy thử như sau. Sử dụng cơ sở dữ liệu hiện tại của bạn, tách nó ra, nếu bạn có thể và sau đó xóa tệp nhật ký hoặc di chuyển nó đến một vị trí hoàn toàn khác trên đĩa. Sau đó đính kèm lại cơ sở dữ liệu và nó sẽ hiển thị trong gui với tệp nhật ký, nhấp vào xóa (hoặc xóa) cho tệp nhật ký để nó không hiển thị, sau đó nhấp vào ok. Về cơ bản gắn nó mà không có nhật ký, sẽ buộc nó tạo tệp nhật ký cho cơ sở dữ liệu ở vị trí mặc định.

Cho tôi biết.


0

Vâng, tôi cũng có vấn đề tương tự, nó liên quan đến lỗi tempDb 9001 tức là không có nhật ký. Chúng tôi khởi động lại các dịch vụ và tất cả đều ổn.

Vấn đề đằng sau vấn đề này là SAN hoặc vấn đề lưu trữ, trong khi thao tác ghi I / O, nó không thể ghi trong hơn 15 giây.


0

Hôm qua, tôi đã nhận được lỗi tương tự "nhật ký cho cơ sở dữ liệu '%' không khả dụng. Lỗi nghiêm trọng 9001, thông điệp 21. Vui lòng liên hệ với quản trị viên của bạn" -

Giải pháp thay thế - Tôi đã kiểm tra 'TempDB' nhưng phần còn lại của cơ sở dữ liệu hệ thống không thể truy cập được. Sau đó, trước khi đi đến tùy chọn sửa chữa, tôi chỉ cần khởi động lại các dịch vụ SQL cho trường hợp đó và vấn đề đã được giải quyết :) :)


-2

Tôi đã thấy điều này xảy ra khi không có dung lượng đĩa trống để mở rộng nhật ký; bạn có thể xác minh có nhiều không gian trên C: \ không, và nhật ký của bạn đang được quản lý, tức là được sao lưu nếu bạn ở chế độ khôi phục hoàn toàn.

Tôi sẽ chuyển ldf của bạn (và mdf's) ra khỏi khối lượng khởi động nếu bạn có tùy chọn.


Hết dung lượng ổ cứng sẽ KHÔNG BAO GIỜ gây ra hỏng hóc cơ sở dữ liệu, trừ khi bạn đang sử dụng bộ nhớ được cung cấp mỏng và bộ nhớ cơ sở hết dung lượng. Nhưng đó là một cơn ác mộng hoàn toàn khác.
mrdenny

Tôi sẽ viết lại..có thể không làm hỏng cơ sở dữ liệu, nhưng chắc chắn là một nguyên nhân khiến các tệp nhật ký không có sẵn như op đã nêu.
SqlACID

1
Có hơn 25 GB dung lượng trống trên ổ đĩa và cơ sở dữ liệu được đề cập có kích thước dưới 25 MB.
Scott Mitchell

Lỗi duy nhất mà bạn từng thấy khi hết dung lượng là lỗi toàn bộ tệp khi cố gắng sửa đổi các hàng trong cơ sở dữ liệu vì giao dịch không thể được ghi vào nhật ký (không phải những gì OP đã nêu). Hết dung lượng sẽ không khiến cơ sở dữ liệu không khả dụng (những gì OP đã nêu).
mrdenny

Không đồng ý. Chạy ra khỏi không gian trên ổ đĩa chứa tệp nhật ký và sau đó tôi bắt đầu thấy chính xác vấn đề tương tự trong câu hỏi.
ADNow
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.