Cloud VPS

Hướng dẫn shrink file log SQL Server trên máy chủ Windows

Vào một ngày đẹp trời, bổng dưng bạn nhận thấy website của mình ngưng hoạt động (hoặc báo lỗi), sau một hồi kiểm tra hoặc liên hệ với nhà cung cấp Hosting thì được biết dung lượng Cloud Hosting/ Cloud Server đã bị đầy mà trong đó Database chiếm dung lượng đáng kể gây gián đoạn website.

Hay bạn tự nhận thấy Database của mình đã tăng dung lượng, trong khi dữ liệu của mình chỉ có vài MB (hoặc vài GB) nhưng LOG File lại chiếm đến tận hàng trăm GB. Vậy bạn phải làm sao để giải quyết vấn đề này?

Chúng tôi khuyến nghị bạn thực hiện theo cách sau đây, vừa thực hiện nhanh chóng, dễ dàng lại vừa đáp ứng được nhu cầu liên tục của ứng dụng. Đó là, SHRINK FILE.

Giả sử, bạn đang có các file database: MB_Data.MDF và file Log: MB_Log.LDF, bạn có thể Run đoạn query sau đây từ SQL Management Studio hoặc có thể tạo sẵn và Run 1 Stored Procedure.

USE MB;

GO

ALTER DATABASE MB SET RECOVERY SIMPLE;

GO

DBCC SHRINKFILE (MB_Log, 1);

GO

ALTER DATABASE MB SET RECOVERY FULL;

GO

Bạn có thể hiểu phương pháp này theo cách giải thích sau :

Có 3 chế độ Recovery trong SQL Server: FULL, SIMPLEBULK LOGGED. Chế độ mặc định là FULL. Bạn có thể vào phần Option của database, 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 database ở 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.

Trong trường hợp bạn không muốn chạy đoạn query như trên thì bạn có thể tham khảo cách làm bằng giao diện trực quan có ảnh kèm theo phía bên dưới :

Truy cập vào database click chuột phải chọn properties chọn Options chọn Recovery Model: Simple

sau đó chọn shrink file log và chuyển lại Recovery Model: full

DỊCH VỤ CLOUD SERVER TỐC ĐỘ XỬ LÝ VƯỢT TRỘI

Bài liên quan

Bài viết liên quan

Back to top button