2012-11-16 32 views
22

Nhật ký giao dịch cho cơ sở dữ liệu '' đã đầy. Để tìm hiểu lý do tại sao không thể sử dụng lại không gian trong nhật ký, hãy xem cột log_reuse_wait_desc trong sys.databases. Hãy giúp tôi giải quyết vấn đề này. Cảm ơn trước.Nhật ký giao dịch cho tên cơ sở dữ liệu 'databasename' đã đầy.

+4

Bạn đã làm theo lời khuyên trong thông báo lỗi? Bạn đã tìm thấy gì ở đó? Bạn đã làm nghiên cứu gì cho đến thời điểm này? –

+0

Có thực sự không có tên cơ sở dữ liệu trong tin nhắn? – egrunin

+1

Thử MSDN: [Nhật ký giao dịch phát triển bất ngờ hoặc trở nên đầy đủ trong SQL Server] (http://support.microsoft.com/kb/317375) Nó có một lời giải thích khá đầy đủ về vấn đề này. – egrunin

Trả lời

16

Câu trả lời rất có thể là bạn cần phải chạy log sao lưu hoặc có một mở giao dịch.

Dưới đây là nhiều hơn một chút để giúp bạn ra ngoài ...

Chạy kịch bản này trên máy chủ của bạn:

-- last FULL backup 
;with FULLBUs 
as (
    select d.name, max(b.backup_finish_date) as 'Last FULL Backup' 
    from sys.databases d 
     join msdb.dbo.backupset b 
      on d.name = b.database_name 
    where b.type = 'D' 
    group by d.name 
), 

-- last LOG backup for FULL and BULK_LOGGED databases 
LOGBUs 
as (
    select d.name, max(b.backup_finish_date) as 'Last LOG Backup' 
    from sys.databases d 
     join msdb.dbo.backupset b 
      on d.name = b.database_name 
    where d.recovery_model_desc <> 'SIMPLE' 
     and b.type = 'L' 
    group by d.name 
) 

-- general overview of databases, recovery model, and what is filling the log, last FULL, last LOG 
select d.name, d.state_desc, d.recovery_model_desc, d.log_reuse_wait_desc, f.[Last FULL Backup], l.[Last LOG Backup] 
from sys.databases d 
    left outer join FULLBUs f 
     on d.name = f.name 
    left outer join LOGBUs l 
     on d.name = l.name 
where d.name not in ('model', 'TempDB') 
order by d.name 

Truy vấn này sẽ cung cấp cho bạn một cái nhìn tổng quan sơ bộ cơ sở dữ liệu của bạn, những gì mô hình phục hồi chúng sử dụng, tại sao nhật ký đầy, và khi bản sao lưu ĐẦY ĐỦ và ĐĂNG NHẬP cuối cùng của bạn được chạy.

Nhìn vào cột được đánh dấu log_reuse_wait_description. Nhiều khả năng nó nói BACKUP. Nguyên nhân có thể xảy ra tiếp theo là GIAO DỊCH.

Nếu đó là BACKUP đây là một số thông tin:

Về cơ bản, đối với cơ sở dữ liệu đơn giản của bạn, hãy chạy một bản sao lưu đầy đủ mỗi ngày. Đối với cơ sở dữ liệu ĐẦY ĐỦ của bạn, hãy chạy bản sao lưu ĐẦY ĐỦ mỗi ngày và sao lưu LOG ​​mỗi giờ. Điều chỉnh tần suất cơ sở dữ liệu LOG ​​của bạn để phù hợp với khả năng mất dữ liệu trong khi vẫn giữ công việc của bạn.

Cách đơn giản nhất để quản lý bản sao lưu của bạn là sử dụng Ola Hallengren's maintenance scripts. Truy cập trang web của anh ấy và thử sử dụng chúng.

Nếu bạn thấy GIAO DỊCH là lý do, hãy thử chạy:

dbcc opentran 

Và theo dõi bất cứ ai là có giao dịch mở.

+1

Rất hữu ích, cảm ơn! –

+0

Tất cả tôi đều nói "NOTHING" hoặc "CHECKPOINT" trong cột log_reuse_wait_description. –

44

Chắc chắn, bạn đang chạy cơ sở dữ liệu trong Full Recovery Mode và không thực hiện sao lưu Nhật ký giao dịch.

Nhấp chuột phải vào cơ sở dữ liệu của bạn trong Trình quản lý máy chủ SQL và kiểm tra trang Tùy chọn. Chuyển mô hình khôi phục từ Full sang Simple rồi nhấp chuột phải vào cơ sở dữ liệu một lần nữa. Chọn TasksShrink, Files. Thu hẹp tệp nhật ký thành kích thước phù hợp (tôi thường gắn vào 20-25% kích thước của tệp dữ liệu).

Chuyển về Full Recovery Model và thực hiện sao lưu toàn bộ cơ sở dữ liệu ngay lập tức.

Bây giờ bạn cần tìm hiểu xem bạn có cần khả năng khôi phục cơ sở dữ liệu của mình đến thời điểm không. Nếu có, hãy lên lịch ghi nhật ký giao dịch thường xuyên và có thể sao lưu vi sai theo yêu cầu của doanh nghiệp bạn.

Trong trường hợp doanh nghiệp có thể sống với một lượng dữ liệu nhất định bị mất, hãy lập lịch sao lưu đầy đủ và chuyển sang chế độ Simple.

+2

Giữa câu trả lời này và câu trả lời của @ Steven, một số thông tin tuyệt vời! –

0

Nhấp chuột phải vào cơ sở dữ liệu \ Properties \ Files.

Bạn sẽ có một bảng với các tệp cơ sở dữ liệu, trong đó có tệp nhật ký. Chỉ cần mở rộng kích thước ban đầu cho một số tiền hợp lý.

0

Làm điều này Nhấp chuột phải vào nút cơ sở dữ liệu -> Tác vụ-> Sao lưu-> Chung (trong tab) -> đặt "Loại sao lưu" thành "Nhật ký giao dịch" -> OK.

1

Nếu mô hình khôi phục cơ sở dữ liệu của bạn đầy và bạn không có kế hoạch bảo trì sao lưu nhật ký, bạn sẽ gặp lỗi này vì nhật ký giao dịch đầy đủ do LOG_BACKUP.

điều này sẽ ngăn bạn thực hiện bất kỳ hành động nào trên cơ sở dữ liệu này như thu hẹp và Công cụ cơ sở dữ liệu SQL Server sẽ tăng lỗi 9002.

để khắc phục hành vi này tôi khuyên bạn nên kiểm tra The transaction log for database ‘SharePoint_Config’ is full due to LOG_BACKUP này hiển thị các bước chi tiết để giải quyết vấn đề này như kế hoạch bảo trì sao lưu nhật ký.

+2

Thay vì đăng bài để tìm câu trả lời (trong liên kết), bạn phải phân phát thông tin đó cho phù hợp với câu hỏi này. Vui lòng xem [Làm cách nào để viết câu trả lời hay?] (/ Help/how-to-answer) và [Cách tham khảo tài liệu được viết bởi người khác] (/ help/referencing) để biết một số nguyên tắc. Câu trả lời chỉ liên kết được coi là câu trả lời chất lượng thấp trên StackOverflow và có thể bị xóa. –

Các vấn đề liên quan