"Nhật ký giao dịch cho cơ sở dữ liệu đã đầy do 'LOG_BACKUP'" trong một máy chủ được chia sẻ


89

Tôi có một trang web Asp.Net MVC 5 với phương pháp tiếp cận mã EntityFramework đầu tiên trong gói lưu trữ được chia sẻ. Nó sử dụng WebbsitePanel mã nguồn mở cho bảng điều khiển và bảng điều khiển SQL Server của nó có phần hạn chế. Hôm nay khi tôi muốn chỉnh sửa cơ sở dữ liệu, tôi đã gặp lỗi này:

The transaction log for database 'db_name' is full due to 'LOG_BACKUP'

Tôi đã tìm kiếm xung quanh và tìm thấy rất nhiều câu trả lời liên quan như thế nàyđiều này hoặc điều này nhưng vấn đề là họ đề xuất chạy một truy vấn trên cơ sở dữ liệu. Tôi đã thử chạy

db.Database.ExecuteSqlCommand("ALTER DATABASE db_name SET RECOVERY SIMPLE;");

với studio trực quan (trên HomeController) nhưng tôi gặp lỗi sau:

System.Data.SqlClient.SqlException: ALTER DATABASE statement not allowed within multi-statement transaction.

Làm thế nào tôi có thể giải quyết vấn đề của tôi? Tôi nên liên hệ với nhóm hỗ trợ (máy chủ của tôi hơi kém) hay tôi có thể tự giải quyết vấn đề này?


Thực thi ALTER mà không cần giao dịch.
usr

@usr Tôi sẽ làm điều đó như thế nào?
Alireza Noori

Nó là một vấn đề cơ sở dữ liệu, thu nhỏ cơ sở dữ liệu có thể hoạt động. Yêu cầu một DBA giúp bạn về điều này.
Shashank Chaturvedi

Bạn phải đã mở một giao dịch bằng cách nào đó. Tôi không biết, có lẽ EF tự động làm điều đó. Bạn cần thực hiện một số nghiên cứu về EF và giao dịch. Hoặc, thực hiện điều này từ SSMS. Hoặc, sử dụng ADO.NET thô. Có thể nhà cung cấp dịch vụ của bạn sẽ không cho phép tuyên bố đó và họ cần sao lưu nhật ký thường xuyên hơn.
usr

Câu trả lời:


38

Gọi cho công ty lưu trữ của bạn và yêu cầu họ thiết lập bản sao lưu nhật ký thường xuyên hoặc thiết lập mô hình khôi phục thành đơn giản. Tôi chắc rằng bạn biết những gì thông báo cho sự lựa chọn, nhưng dù sao thì tôi cũng sẽ nói rõ ràng. Đặt mô hình khôi phục thành đầy đủ nếu bạn cần khả năng khôi phục về thời điểm tùy ý. Dù bằng cách nào thì cơ sở dữ liệu cũng được định cấu hình sai.


Cảm ơn bạn. Tôi muốn tự mình làm việc này nhưng cũng đã liên hệ với họ và họ đã thiết lập khôi phục và chạy shrinktrên DB. Ngoài ra, tôi không cần khôi phục vì vậy tôi đã yêu cầu họ đặt nó ở SIMPLEchế độ.
Alireza Noori

1
Đây trang MSDN giải thích làm thế nào để thiết lập các mô hình phục hồi để đơn giản!
shekhar,

143

Ngoài câu trả lời của Ben, bạn có thể thử truy vấn dưới đây theo nhu cầu của bạn

USE {database-name};  
GO  
-- Truncate the log by changing the database recovery model to SIMPLE.  
ALTER DATABASE {database-name}
SET RECOVERY SIMPLE;  
GO  
-- Shrink the truncated log file to 1 MB.  
DBCC SHRINKFILE ({database-file-name}, 1);  
GO  
-- Reset the database recovery model.  
ALTER DATABASE {database-name}
SET RECOVERY FULL;  
GO 

Cập nhật Credit @ cema-sp

Để tìm tên tệp cơ sở dữ liệu, hãy sử dụng truy vấn bên dưới

select * from sys.database_files;

8
Bổ sung: để tìm {cơ sở dữ liệu-file-name}:select * from sys.database_files;
UBDT-sp

2
Tôi có thể xác nhận đây là một điều trị. Nên là câu trả lời được chấp nhận.
garrettendi

2
Cảm ơn @Mohit Dharmadhikari; Tôi đã thử nhiều cách khác bao gồm phân bổ thêm dung lượng đĩa và tăng kích thước tệp nhật ký, nhưng không có gì hoạt động cho đến khi tôi thu nhỏ tệp Nhật ký hiện có trước.
Johnny

1
Cảm ơn, rất hữu ích.
Obakeng Molebatsi

2
Tôi tin rằng {database-file-name} sẽ tương đương với namecột, cho hàng của nhật ký, từ truy vấn này:select * from sys.database_files
Bob Horn

14

Đôi khi khi đĩa hết dung lượng, thông báo "nhật ký giao dịch cho cơ sở dữ liệu XXXXXXXXXX đã đầy do 'LOG_BACKUP'" sẽ được trả về khi câu lệnh SQL cập nhật không thành công. Kiểm tra không gian đĩa của bạn :)


5

Lỗi này xảy ra do nhật ký giao dịch bị đầy do LOG_BACKUP. Do đó, bạn không thể thực hiện bất kỳ hành động nào trên cơ sở dữ liệu này và Trong trường hợp này, Công cụ cơ sở dữ liệu SQL Server sẽ phát sinh lỗi 9002.

Để giải quyết vấn đề này bạn nên làm như sau

  • Sao lưu toàn bộ cơ sở dữ liệu.
  • Thu nhỏ tệp nhật ký để giảm kích thước tệp vật lý.
  • Tạo LOG_BACKUP.
  • Tạo Kế hoạch bảo trì LOG_BACKUP để thường xuyên ghi nhật ký sao lưu.

Tôi đã viết một bài báo với tất cả các chi tiết liên quan đến lỗi này và cách giải quyết nó tại Nhật ký giao dịch cho cơ sở dữ liệu 'SharePoint_Config' đã đầy do LOG_BACKUP


8
Đăng thông báo lỗi làm câu trả lời của bạn hoàn toàn không hữu ích. Các câu trả lời chỉ có liên kết cũng được đưa ra trên StackOverflow. Bạn nên trích xuất văn bản có liên quan từ liên kết và trích dẫn nó ở đây. Điều này đặc biệt quan trọng trong trường hợp liên kết chết trong tương lai, vì tất cả các liên kết chắc chắn đều vậy.
Dan Bechard

1

Tôi gặp lỗi tương tự nhưng từ một công việc phụ trợ (công việc SSIS). Khi kiểm tra cài đặt tăng trưởng tệp Nhật ký của cơ sở dữ liệu, tệp nhật ký bị giới hạn tăng trưởng 1GB. Vì vậy, những gì đã xảy ra là khi công việc chạy và nó yêu cầu máy chủ SQL phân bổ thêm không gian nhật ký, nhưng giới hạn tăng trưởng của nhật ký bị giảm khiến công việc không thành công. Tôi đã sửa đổi tốc độ tăng nhật ký và đặt nó tăng thêm 50MB và Tăng trưởng không giới hạn và lỗi đã biến mất.


1

Điều này cũng có thể xảy ra khi tệp nhật ký bị hạn chế về kích thước.

Nhấp chuột phải vào cơ sở dữ liệu trong Object Explorer

Chọn thuộc tính

Chọn tệp tin

Trên dòng nhật ký, bấm vào dấu ba chấm trong cột Tự động phát triển / Kích thước tối đa

Thay đổi / xác minh Kích thước tệp tối đa là không giới hạn.

nhập mô tả hình ảnh ở đây

Sau khi thay đổi thành không giới hạn, cơ sở dữ liệu đã hoạt động trở lại.

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.