SQL Server 2005 交易記錄檔 (.ldf) 長期增長會佔滿磁碟、拖慢效能。本文整理四種清理方法、收縮指令、自動收縮設定與錯誤日誌循環技巧,並說明各方法適用版本與風險。
xxx_log.ldf。.mdf → 系統提示找不到記錄檔 → 移除記錄檔項目 → 確定。.ldf (約 504KB)。T-SQL 等效:
USE master;
EXEC sp_detach_db @dbname = 'TestDB';
EXEC sp_attach_single_file_db @dbname = 'TestDB',
@physname = 'D:\Data\TestDB.mdf';
DUMP TRANSACTION TestDB WITH NO_LOG;
DBCC SHRINKFILE ('TestDB_log', 1); -- 收縮至 1MB
BACKUP LOG TestDB WITH NO_LOG;
DBCC SHRINKFILE ('TestDB_log', 1);
-- 僅收縮記錄檔
DBCC SHRINKFILE (2, 1); -- file_id=2 通常為 log,目標 1MB
-- 或收縮整個資料庫
DBCC SHRINKDATABASE (TestDB);
SSMS 圖形介面:資料庫右鍵 → 工作 → 收縮 → 檔案 → 選擇 記錄 → 收縮至 輸入最小可用 MB。
-- T-SQL
EXEC sp_dboption 'TestDB', 'autoshrink', 'TRUE';
-- SSMS:資料庫屬性 → 選項 → 自動收縮 = True
缺點:頻繁收縮/增長造成碎片、效能抖動。建議排程手動收縮(如每月一次)。
ALTER DATABASE TestDB MODIFY FILE (NAME = TestDB_log, MAXSIZE = 2048MB);
或 SSMS:資料庫屬性 → 檔案 → 記錄檔 → 限制檔案增長。
EXEC sp_cycle_errorlog;
效果:將目前 ERRORLOG 更名為 ERRORLOG.1,以此類推,產生新空 ERRORLOG。避免日誌過大導致服務啟動失敗。
| 方法 | SQL 2000 | SQL 2005 | SQL 2008+ |
|---|---|---|---|
| 分離/刪除/附加 | ✓ | ✓ | ✓ |
| DUMP TRANSACTION NO_LOG | ✓ | ✓ | ✗ (移除) |
| BACKUP LOG NO_LOG | ✓ | ✓ | ✗ (移除) |
| DBCC SHRINKFILE | ✓ | ✓ | ✓ |
| sp_cycle_errorlog | ✓ | ✓ | ✓ |
DBCC SHRINKFILE 維持合理大小。DBCC SQLPERF(LOGSPACE) 定期巡檢。選擇適合復原模式與業務 SLA 的記錄管理策略,比事後被動清理更有效率。