資料庫長期運行會導致 .mdf/.ldf 膨脹,刪除資料不會自動釋放檔案空間。本文系統整理 Access/SQL Server 壓縮操作,重點闡述 SQL Server 三種記錄檔壓縮方法、簡單/完整復原模式切換策略、DBCC SHRINK 使用注意事項與生產環境最佳實務。
工具 → 資料庫實用工具 → 「壓縮和修復資料庫」。
收縮資料庫 (DBCC SHRINKDATABASE) 主要釋放記錄檔空間,資料檔效果有限。建議定期執行防止 LDF 失控。
對應 T-SQL:
-- 切換至簡單模式
ALTER DATABASE [YourDB] SET RECOVERY SIMPLE;
GO
-- 收縮記錄檔 (檔案 ID 通常為 2)
DBCC SHRINKFILE (2, 100); -- 目標縮減至 100 MB
GO
-- 切回完整模式
ALTER DATABASE [YourDB] SET RECOVERY FULL;
GO
-- 立即進行完整備份啟動新記錄鏈
BACKUP DATABASE [YourDB] TO DISK = '...';
GO
-- 截斷記錄 (舊版相容)
BACKUP LOG [YourDB] WITH NO_LOG; -- 或 TRUNCATE_ONLY
-- 收縮
DBCC SHRINKDATABASE ([YourDB]); -- 或 SHRINKFILE
注意:NO_LOG/TRUNCATE_ONLY 在 SQL Server 2008 後已移除,請改用方法一。
.ldf。.mdf → 系統提示缺少記錄檔 → 確定自動建立新 500KB LDF。等效 T-SQL:
EXEC sp_detach_db 'YourDB', 'true';
-- 手工刪除 LDF
EXEC sp_attach_single_file_db 'YourDB', 'D:\Data\YourDB_data.mdf';
ALTER DATABASE [YourDB] SET RECOVERY SIMPLE;
簡單模式下 Checkpoint 會自動截斷非作用中記錄,LDF 維持穩定體積。
| 場景 | 建議做法 |
|---|---|
| 生產環境 (需時間點還原) | 完整模式 + 定期完整/差異/記錄備份 + 監控 LDF 大小,必要時 SHRINKFILE 目標值保留合理空間 (如 20-30%) 避免頻繁自動成長碎片。 |
| 測試/開發/唯讀報表庫 | 簡單模式,免除記錄檔管理負擔。 |
| LDF 已佔滿磁碟緊急處理 | 切簡單模式 → SHRINKFILE → 切回完整模式 → 立即完整備份。 |
| 極端損壞/無法備份 | 分離刪除 LDF 重建 (資料遺失風險,最後手段)。 |
SHRINKDATABASE 同時處理資料/記錄檔,易造成資料檔碎片;精準控制請用 SHRINKFILE 指定檔案 ID。初始大小 與 自動成長增量 (建議固定 MB, 非百分比) 才是正道。