交易記錄檔暴增是 DBA 常見痛點。本文深度解析 大量記錄復原模式,對比完整復原模式,說明其最小化記錄機制、BCM 頁面追蹤、尾端記錄備份限制,並提供切換策略與風險控制建議。
介於完整復原模式與簡單復原模式之間:
BULK INSERT / bcp / OPENROWSET(BULK...)SELECT INTOINSERT ... SELECT (搭配 TABLOCK 提示)CREATE INDEX / ALTER INDEX REBUILDDROP INDEX (叢集索引)WRITETEXT / UPDATETEXT (大型值類型)[記錄檔頭] [大量操作修改的資料頁 1] [資料頁 2] ... [一般交易記錄]
因此:交易記錄檔可能很小,但記錄備份檔可能很大 (因包含完整資料頁)。
| 優點 | 缺點/風險 |
|---|---|
| 大量操作效能大幅提升 (I/O 減少 90%+) | 包含最小化記錄的記錄備份無法時間點還原 |
| 交易記錄檔不會因大量操作暴增 | 若記錄備份損毀,或大量操作後未備份即發生災難 → 資料遺失 |
| 無大量操作時行為同完整模式,支援時間點還原 | 尾端記錄備份需所有修改過的資料檔案可存取,否則無法備份尾端 |
推薦模式:平時完整模式 → 大量操作前切換到大量記錄 → 完成後切回完整模式 → 立即執行記錄備份
-- 1. 大量操作前切換
ALTER DATABASE MyDB SET RECOVERY BULK_LOGGED;
-- 2. 執行大量操作 (如 BULK INSERT, CREATE INDEX, SELECT INTO)
BULK INSERT BigTable FROM 'data.txt' WITH (TABLOCK);
-- 3. 操作完成切回完整模式
ALTER DATABASE MyDB SET RECOVERY FULL;
-- 4. 關鍵:立即執行記錄備份,建立可還原點
BACKUP LOG MyDB TO DISK = '..._log.trn';
若資料庫處於大量記錄模式且包含最小化記錄交易,執行尾端記錄備份 (BACKUP LOG ... WITH NORECOVERY) 時,所有被大量操作修改的資料檔案必須線上可存取。若資料檔受損離線,將無法備份尾端記錄,導致該時間點後的所有交易永久遺失。
The bulk-logged recovery model minimally logs bulk operations, although fully logging other transactions. ... If a log backup contains any bulk-logged operations, you cannot restore to a point-in-time within that log backup; you can restore only the whole log backup.
大量記錄復原模式是大量資料載入、索引重建等維護作業的「效能加速器」,但引入「無法時間點還原」與「尾端備份依賴資料檔」兩大風險。嚴格遵循「切換→操作→切回→備份」四步驟,並確保資料檔高可用性,才能安全享受效能紅利。