- [DEVEXPRESS] Chia sẻ code các tạo report in nhiều hóa đơn trên XtraReport C#
- [POWER AUTOMATE] Hướng dẫn gởi tin nhắn zalo từ file Excel - No code
- [C#] Chia sẻ code lock và unlock user trong domain Window
- [SOFTWARE] Giới thiệu bộ phần mềm tính Kết Cấu Thép HatteSale, Mộng Đơn, Dầm, Sàn, Móng Cọc, Vách, Xà Gồ, Tính Tải Trọng
- [DEVEXPRESS] Vẽ Biểu Đồ Stock Chứng Khoán - Công Cụ Thiết Yếu Cho Nhà Đầu Tư trên Winform
- [C#] Hướng dẫn bảo mật ứng dụng 2FA (Multi-factor Authentication) trên Winform
- [C#] Hướng dẫn convert HTML code sang PDF File trên NetCore 7 Winform
- [C#] Hướng dẫn viết ứng dụng chat với Gemini AI Google Winform
- Hướng dẫn khóa file bằng nhiều process id, không cho xóa tập tin
- Hướng dẫn cách tạo Product Id cho ứng dụng phần mềm XXXXX-XXXXX-XXXXX-XXXXX
- [SQLSERVER] Hướng dẫn tạo script sql từ ứng dụng Sqlserver management Studio
- [C#] Hướng dẫn sử dụng thư viện AutoITx lấy id và password Ultraviewer trên winform
- [VB.NET] Hướng dẫn lấy thông tin tài khoản đăng nhập windows và khởi động lại ứng dụng ở chế độ Administrator
- [C#] Sử dụng thư viện Polly gửi lại request api khi request bị lỗi hay rớt mạng
- [DEVEXPRESS] Chia sẻ source code tạo báo cáo report in tem nhãn label trên C# winform
- [DEVEXPRESS] Hướng dẫn vẽ biểu đồ Bar Chart trên Winform
- [C#] Tạo form đăng nhập và đăng ký với hiệu ứng Sliding Animation Effect
- [C#] Hướng dẫn tạo thanh toán đơn hàng qua mã vạch VietQR sử dụng API PayOS hoàn toàn miễn phí
- [C#] Hướng dẫn ghi log ra RichTextBox giống Console trên Winform sử dụng thư viện Serilog
- [C#] Hướng dẫn cách tạo mã QR Code trên file Excel
[SQLSERVER] Hướng dẫn giảm bớt dung lượng file Log Database
Bài viết hôm nay, mình xin hướng dẫn các bạn cách làm giảm dung lượng file Log trong Database của SQL Server.
Ví dụ: Bạn có 1 database dung lượng khoảng 1GB, nhưng file Log của nó lại lên đến 40GB, hoặc thậm chí lên đến hàng trăm GB.
Nếu các bạn nào đã làm từng việc với cơ sở dữ liệu lớn thì sẽ thường xuyên gặp vấn đề này.
Vậy chúng ta cần giải quyết vấn đề này như thế nào:
Có rất nhiều cách để giải quyết vấn đề này
- 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ì ko 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
SQL Server 2005 Books Online:
“[TRUNCATE_ONLY]
This option will be removed in a future version of SQL Server. Avoid using it in new development work, and plan to modify applications that currently use it.
…
We recommend that you never use NO_LOG or TRUNCATE_ONLY to manually truncate the transaction log…”.
Tôi thường dùng cách thứ 3.
Giả sử DB của tôi là Sinhvien.
File Data : Sinhvien_Data.MDF
File Log : Sinhvien_Log.LDF
USE Sinhvien;
GO
-- Truncate the log by changing the database recovery model to SIMPLE.
ALTER DATABASE Sinhvien
SET RECOVERY SIMPLE;
GO
-- Shrink the truncated log file to 1 MB.
DBCC SHRINKFILE (Sinhvien_Log, 1);
GO
-- Reset the database recovery model.
ALTER DATABASE Sinhvien
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 Option của DB, xem trong Recovery Model.
Khi ở chế độ này, bất kì một transaction nào, kể cả khi đã commit cũng đề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ế với 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ẽ ko thể xóa bỏ hết các transaction đã được COMMIT.
SHRINKFILE chỉ thu dọn và 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ư ko tác dụng, hoặc nếu có thì file LOG dung lượng giảm đi ko đáng kể.
- Sau đó SET RECOVERY về lại FULL
Trên MSDN cũng khuyên nếu muốn Backup LOG, các bạn nên chuyển về chế độ SIMPLE, hơn là backup LOG với Truncate_Only và No_LOG
* Chú ý: Với những DB lớn, có kế hoạch Backup riêng, bạn cần hỏi ý kiến của DBA trước khi thực hiện. Vì một vài chế độ BackUp dựa rất nhiều vào file LOG.
Tuy nhiên nếu có DBA, thì không bao giờ để xảy ra trường hợp này, vì công việc của họ là thường xuyên theo dõi, giám sát và xử lý để Server hoạt động tốt.
Theo SqlViet