SQL Server 資料庫的交易日誌(LDF 檔案)會記錄所有對資料庫的修改操作。隨著時間增長,日誌檔案可能佔用大量磁碟空間,導致效能下降,甚至填滿系統磁碟。本文整理多種清理日誌的方法,適用於 SQL Server 2005 環境。
這是最徹底的方式,能強制重建一個極小的新日誌檔(約 500 KB)。操作步驟如下:
也可使用 T-SQL 指令快速完成:
USE master;
EXEC sp_detach_db @dbname = 'TestDB';
EXEC sp_attach_single_file_db @dbname = 'TestDB', @physname = 'D:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008\MSSQL\DATA\TestDB.mdf';
使用 `DUMP TRANSACTION` 指令標記日誌為可覆寫,再配合收縮:
DUMP TRANSACTION TestDB WITH NO_LOG;
DBCC SHRINKFILE ('TestDB_log', 1);
注意:此指令在 SQL Server 2008 及更新版本已移除,不建議在生產環境頻繁使用,可能導致資料遺失風險。
BACKUP LOG TestDB WITH NO_LOG;
DBCC SHRINKFILE ('TestDB_log', 1);
同樣在 SQL Server 2008+ 不支援。
透過 SSMS 介面或 T-SQL 收縮日誌檔案:
-- 收縮指定日誌檔案至 1 MB
DBCC SHRINKFILE ('TestDB_log', 1);
-- 或收縮整個資料庫
DBCC SHRINKDATABASE (TestDB, TRUNCATEONLY);
當 SQL Server 錯誤日誌(ErrorLog)過大導致服務無法啟動時,可執行系統預存程序循環日誌檔案,無需重啟服務:
EXEC sp_cycle_errorlog;
此指令會將目前的 `ERRORLOG` 重新命名為 `ERRORLOG.1`,依此類推,並建立新的空白 `ERRORLOG`。