SQL Server 2005 交易記錄檔 (.ldf) 過大是常見維護議題。本文彙整自動/手動清理、壓縮、限制成長、復原模式切換等完整操作,並標註風險與適用版本差異。
| 策略 | 指令/操作 | 優點 | 缺點/風險 |
|---|---|---|---|
| 自動清理 | 設定資料庫選項 TRUNC. LOG ON CHKPT (等同 RECOVERY SIMPLE) | 無人工干預、不易爆滿 | 無法時間點還原、高可用性架構 (鏡像/複寫/AlwaysOn) 不支援 |
| 手動清理 | BACKUP LOG ... WITH NO_LOG / TRUNCATE_ONLY (僅 SQL 2000/2005) | 立即釋放空間 | 中斷記錄鏈、需立即完整備份、2008+ 已移除 |
DUMP TRANSACTION [DB] WITH NO_LOG (或 BACKUP LOG [DB] WITH NO_LOG)BACKUP LOG [DB] WITH TRUNCATE_ONLYDBCC SHRINKFILE ([DB_log], 1) (壓縮至 1 MB) 或 DBCC SHRINKDATABASE([DB], TRUNCATEONLY)。EXEC sp_detach_db 'DB'.ldf 檔案。.mdf:EXEC sp_attach_single_file_db 'DB', '路徑\DB.mdf' → 自動建立 ~500KB 新記錄檔。⚠️ 風險:若資料庫有未提交交易或系統資料庫損壞,可能導致資料遺失或無法附加。生產環境嚴禁使用。
EXEC sp_dboption 'DB', 'autoshrink', 'true' (不建議常開,會造成索引碎片與效能抖動)。ALTER DATABASE [DB] MODIFY FILE (NAME = 邏輯名, MAXSIZE = 2048MB)。BACKUP LOG [DB] TO DISK = '路徑\DB_log.trn',配合維護計畫排程執行。BACKUP LOG [DB] TO DISK = '尾部記錄.trn' (捕捉誤操作前的最後交易)。RESTORE DATABASE [DB] FROM DISK = '全備.bak' WITH NORECOVERY。NORECOVERY)。RESTORE LOG [DB] FROM DISK = '尾部記錄.trn' WITH STOPAT = 'YYYY-MM-DD HH:MM:SS', RECOVERY。NO_LOG/TRUNCATE_ONLY。ALTER DATABASE SET RECOVERY SIMPLE + DBCC SHRINKFILE。