版本差異總覽
| 版本 | 關鍵指令 | 備註 |
| SQL 2000 | DUMP TRANSACTION ... WITH NO_LOG / BACKUP LOG ... WITH NO_LOG | 已移除於 2008 |
| SQL 2005 | 支援上述指令,亦可用 DBCC SHRINKFILE | 建議改用 SIMPLE 模式切換 |
| SQL 2008+ | 不支援 NO_LOG/TRUNCATE_ONLY | 必須切換復原模式配合 SHRINKFILE |
SQL Server 2000 / 2005 傳統寫法 (已淘汰)
-- 2000/2005 通用
BACKUP LOG [YourDB] WITH NO_LOG;
DBCC SHRINKDATABASE([YourDB]);
警告:NO_LOG 會中斷記錄鏈,後續無法進行記錄備份,僅適用於緊急釋放空間且可接受重新完整備份的情境。
SQL Server 2008 / 2008 R2 / 2012+ 標準流程
USE [master];
GO
ALTER DATABASE [YourDB] SET RECOVERY SIMPLE WITH NO_WAIT;
GO
ALTER DATABASE [YourDB] SET RECOVERY SIMPLE;
GO
USE [YourDB];
GO
-- 邏輯記錄檔名稱請先查詢
DBCC SHRINKFILE (N'YourDB_Log', 11, TRUNCATEONLY); -- 目標 11 MB 視需求調整
GO
USE [master];
GO
ALTER DATABASE [YourDB] SET RECOVERY FULL WITH NO_WAIT;
GO
ALTER DATABASE [YourDB] SET RECOVERY FULL;
GO
查詢邏輯記錄檔名稱
USE [YourDB];
GO
SELECT file_id, name FROM sys.database_files WHERE type_desc = 'LOG';
關鍵差異解析
- NO_LOG / TRUNCATE_ONLY:2008 起移除,因會破壞復原能力。
- SIMPLE 模式切換:內部執行
CHECKPOINT 截斷非作用中 VLF,再配合 SHRINKFILE(..., TRUNCATEONLY) 釋放空間,不移動資料頁,效能影響最小。
- 目標大小:
SHRINKFILE 第二參數為 MB;0 表預設最小值,指定數值可保留緩衝空間避免頻繁自動成長。
最佳實務建議
- 生產環境嚴禁常態使用此腳本,應建立定期
BACKUP LOG 排程。
- 若必須執行,請在維護窗口、完整備份後進行,並立即切回 FULL 模式且再做一次完整備份。
- 監控
DBCC SQLPERF(LOGSPACE) 與 VLF 數量 (DBCC LOGINFO),預先規劃初始大小/成長增量。