交易記錄檔 (.ldf) 失控增長是 DBA 常見痛點。本文彙整記錄檔清除、壓縮、刪除的實務操作與風險控制。
-- 截斷非作用中虛擬記錄檔 (VLF),不縮減實體檔案大小
BACKUP LOG database_name WITH NO_LOG;
-- 接著壓縮資料庫釋放空間
DBCC SHRINKDATABASE (database_name, target_percent);
-- 或針對記錄檔
DBCC SHRINKFILE (log_file_logical_name, target_size_MB);
關鍵點:
NO_LOG 僅標記非作用中 VLF 可覆寫,不減小實體檔案SHRINKFILE 才能釋放磁碟空間BACKUP LOG TO DISK 正規備份後再壓縮ALTER DATABASE database_name SET RECOVERY SIMPLE;
.ldf.mdf風險:未認可交易遺失、資料庫可能進入置疑模式、破壞交易一致性。僅限開發/測試環境或極端災難救援。
DBCC SHRINKDATABASE (database_name [, target_percent]
[, {NOTRUNCATE | TRUNCATEONLY}]);
target_percent:壓縮後保留未使用空間百分比NOTRUNCATE:釋放空間保留在資料庫檔案內,不還給 OSTRUNCATEONLY:僅釋放檔案末端未使用空間,不移動資料頁 (最快、最安全)DBCC SHRINKFILE (file_id_or_logical_name [, target_size_MB]
[, {NOTRUNCATE | TRUNCATEONLY | EMPTYFILE}]);
target_size_MB 直接縮減至指定大小EMPTYFILE:將資料移至同檔案群組其他檔案,準備移除檔案企業管理員 → 資料庫屬性 → 選項 → 「自動壓縮」/「自動壓縮排程」。
缺點:索引碎片化嚴重、CPU/IO 突發、不可預測執行時間。建議改用維護計畫排程手動壓縮。
DBCC SQLPERF(LOGSPACE) 觀察使用率.ldf 或使用 NO_LOG 繞過備份鏈