交易記錄檔(LDF)是 SQL Server 確保 ACID 特性的核心,卻常因疏忽維護導致暴漲佔滿磁碟、資料庫標記 SUSPECT 甚至服務中斷。本文系統整理記錄檔運作原理、日常維護、壓縮技術、災難恢復與效能優化最佳實務。
BACKUP LOG 才會截斷。BACKUP LOG DB_Name TO DISK = 'path.trn' WITH COMPRESSIONDBCC SQLPERF(LOGSPACE)、SELECT name, log_reuse_wait_desc FROM sys.databasesMAXSIZE 上限。| 級別 | 操作 | 風險 | 適用場景 |
|---|---|---|---|
| 1️⃣ 標準 | BACKUP LOG DB WITH NO_LOG(舊版)或切換 Simple → DBCC SHRINKFILE(LogFile, target_MB) → 切回 Full |
低(切模式會斷開記錄鏈,需即時完整備份) | 一般暴漲、可接受短暫斷鏈 |
| 2️⃣ 企管介面 | 右鍵資料庫 → 所有工作 → 收縮資料庫 → 收縮檔案 → 選記錄檔 → 指定目標 MB | 低 | 圖形化操作偏好者 |
| 3️⃣ 分離刪除重附(高風險) | sp_detach_db → 刪除 .ldf → sp_attach_single_file_db 只附 .mdf |
極高:未提交交易遺失、資料庫損壞、復原失敗 | 極端情況、無備份、接受資料遺失 |
| 4️⃣ 緊急模式修復 | ALTER DATABASE DB SET EMERGENCY; DBCC CHECKDB(DB, REPAIR_ALLOW_DATA_LOSS) |
資料遺失不可控 | 資料庫已標記 SUSPECT 無法啟動 |
BACKUP LOG → 複製至備援伺服器 → RESTORE LOG WITH NORECOVERY。BULK INSERT/BCP 搭配 Bulk-Logged 模式,分批提交。AUTO_SHRINK = ON 會導致反覆縮放產生碎片、CPU 飆升、效能抖動,微軟已標記為棄用功能,生產環境嚴禁啟用。
log_reuse_wait_desc 非 NOTHING 時有告警?善管記錄檔,才能讓 SQL Server 在高併發、大交易量下持穩定運行。