Home > SQL Server > Làm sao giảm bớt dung lượng file Log của SQL Server

Làm sao giảm bớt dung lượng file Log của SQL Server

Giả sử bạn có database Test

  • file data : Test_Data.MDF
  • file log : Test_Log.LDF
USE Test;
GO
 
-- Truncate the log by changing the database recovery model to SIMPLE.
ALTER DATABASE Test
SET RECOVERY SIMPLE;
GO
-- Shrink the truncated log file to 1 MB.
DBCC SHRINKFILE (Test_Log, 1);
GO
-- Reset the database recovery model.
ALTER DATABASE Test
SET RECOVERY FULL;
GO

Giải thích :

Có 3 chế độ Recovery trong SQL Server : FULL, SIMPLE và BULK LOGGED

Chế độ mặc định là FULL. Bạn có thể vào phần Options của DB, xem trong Recovery model. Khi ở chế độ này, bất kỳ một transaction nào, kể cả khi đã commit đều được lưu trong LOG, do đó có thể dựa vào những transaction này để “quay lui (rollback)” DB về bất kì thời điểm nào. Vì thế có những DB có Transaction nhiều, DATA ít thì file LOG vẫn có thể rất lớn.

– Đầu tiên SET RECOVERY của DB về SIMPLE, ở chế độ này, sau khi transaction được COMMIT, sẽ tự động xóa. Do vậy FILE LOG của DB ở chế độ này thường rất nhỏ.

– Dùng DBCC SHRINKFILE để SHRINK file log xuống còn 1 Mb.

Nếu không set Recovery về SIMPLE, thì sẽ không thể xóa bỏ hết các transaction đã được COMMIT. SHRINKFILE chỉ thu dọn, sắp xếp và phân bố lại dữ liệu, bỏ các vùng trống để giải phóng bộ nhớ, chứ không phải xóa dữ liệu. Vì thế ở chế độ FULL, SHRINKFILE hầu như không tác dụng, hoặc nếu có thì file LOG dung lượng giảm đi không đáng kể.

– Sau đó SET RECOVERY về lại FULL

Trên MSDN cũng khuyên nếu muốn Backup LOG, bạn nên chuyển về chế độ SIMPLE, hơn là Backup Log với Truncate_Only và No_Log.

Ngoài ra, bạn có thể sử dụng các cách khác như sau :

  • Detach DB, xóa file LOG, sau đấy Attach lại DB . Tuy nhiên với CSDL đòi hỏi tính sẵn sàng cao thì không mấy ai cho phép bạn làm điều này.
  • Backup LOG với OPTION là TRUNCATE_ONLY hoặc NO_LOG ( Với phiên bản SQL Server 2008 thì đã bỏ Option này )
USE DatabaseName
GO
DBCC SHRINKFILE(<TransactionLogName>, 1)
BACKUP LOG <DatabaseName> WITH TRUNCATE_ONLY
DBCC SHRINKFILE(<TransactionLogName>, 1)

( Tham khảo từ : http://www.sqlviet.com/blog/ )

 

Advertisements
Categories: SQL Server
  1. No comments yet.
  1. No trackbacks yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: