交易日誌 (.ldf) 佔滿磁碟導致資料庫寫入失敗,常見原因:
log_reuse_wait_desc 顯示 LOG_BACKUP、ACTIVE_TRANSACTION、REPLICATION 等等待原因。BACKUP LOG [YourDB] TO DISK = 'D:\Backup\YourDB_Log.trn' WITH COMPRESSION, STATS = 5;
-- 以 SSMS 圖形化:右鍵資料庫 → 工作 → 縮減 → 檔案 → 檔案類型「記錄」 → 釋放未使用空間 / 縮減至 N MB
-- 或 T-SQL:
DBCC SHRINKFILE (N'YourDB_Log', 1024); -- 縮減至 1 GB (單位 MB)
DBCC SQLPERF(LOGSPACE); 確認使用率回落合理區間 (10-30%)。⚠ 注意:頻繁縮減會導致日誌檔反覆增長/縮減 (VLF 碎片化),嚴重影響寫入效能。縮減應為「一次性急救」,而非常態操作。
⚠ 高風險警告:此操作會**丟失未備份的交易日誌內容**,可能導致資料不一致、違反 RPO。僅在「日誌檔損壞、無法備份、接受資料遺失」極端情況使用,且必須先離線備份 .mdf/.ldf 檔案。
.ldf 檔案。.mdf → 確定 (自動建立新 512 KB 日誌檔)。| 模式 | 適用場景 | 日誌行為 | 備份需求 |
|---|---|---|---|
| 簡單 | 開發/測試、唯讀報表、資料可重載 (ETL 暫存區) | Checkpoint 時自動截斷非作用中 VLF | 僅完整/差異備份,**無法備份日誌、無法時間點還原** |
| 完整 | 生產 OLTP、任務關鍵、需時間點還原 | 保留所有交易直到日誌備份 | 必須定期日誌備份 (建議 15-60 分鐘) |
| 大量記錄 | 大量匯入/索引重建期間臨時切換 | 最小化記錄大量操作 | 同完整模式,需日誌備份 |
-- T-SQL
ALTER DATABASE [YourDB] SET RECOVERY SIMPLE;
GO
-- SSMS:右鍵資料庫 → 內容 → 選項 → 復原模式 → 簡單
-- 維護計畫 / SQL Agent Job 每 15-30 分鐘執行
BACKUP LOG [YourDB]
TO DISK = 'D:\Backup\YourDB_Log_%Y%m%d_%H%M.trn'
WITH COMPRESSION, CHECKSUM, STATS = 5;
-- 配合清理舊備份腳本 (保留 7-30 天)
DBCC SQLPERF(LOGSPACE); 定期收集日誌使用率,超過 70% 觸發告警。log_reuse_wait_desc (sys.databases) 非 NOTHING 狀態持續超過閾值告警。DBCC LOGINFO; 理想 VLF 數量 < 1000,大小均勻。日誌暴增本質是「備份策略缺失」或「復原模式配置錯誤」。**標準方案 (日誌備份 + 縮減)** 安全可控,應作為首選;**分離重建** 僅作極端急救。根治在於:正確選擇復原模式、建立自動化日誌備份作業、預先配置日誌大小與固定成長量、部署監控告警。將日誌管理納入常態運維體系,才能徹底杜絕「半夜磁碟滿」驚魂。