DUMP TRANSACTION 資料庫名 WITH NO_LOG;
或現代語法:
BACKUP LOG 資料庫名 WITH NO_LOG; -- SQL 2008 後標記為過時,改用簡單模式截斷
-- 1. 切換簡單復原模式
ALTER DATABASE 資料庫名 SET RECOVERY SIMPLE;
-- 2. CHECKPOINT 強制截斷
CHECKPOINT;
-- 3. (可選) 切回完整模式
ALTER DATABASE 資料庫名 SET RECOVERY FULL;
-- 收縮整個資料庫 (不建議常用)
DBCC SHRINKDATABASE (資料庫名);
-- 收縮指定檔案 (推薦)
-- 先查詢檔案編號
SELECT file_id, name, type_desc, physical_name FROM sys.database_files;
-- 再收縮 (1=資料檔, 2=記錄檔)
DBCC SHRINKFILE (2, 100); -- 記錄檔壓縮至 100 MB
-- 1. 卸離
EXEC sp_detach_db @dbname = '資料庫名';
-- 2. 作業系統層面刪除 .ldf 檔案
-- 3. 附加單一資料檔 (自動建立最小 512KB 記錄檔)
EXEC sp_attach_single_file_db @dbname = '資料庫名',
@physname = 'C:\Program Files\Microsoft SQL Server\MSSQL\Data\資料庫名.mdf';
警告:僅適用於**乾淨關閉**的資料庫。異常關閉會導致附加失敗或資料不一致。生產環境嚴禁。
-- T-SQL
EXEC sp_dboption '資料庫名', 'autoshrink', 'TRUE';
-- 或
ALTER DATABASE 資料庫名 SET AUTO_SHRINK ON;
缺點:背景執行緒隨機運行 → 效能抖動、索引碎片化、鎖競爭。改用**維護計畫定期手動收縮 + 索引重建**。
-- SSMS:資料庫屬性 → 檔案 → 記錄檔 → 自動增長 → 限制大小 (MB)
-- T-SQL
ALTER DATABASE 資料庫名 MODIFY FILE (NAME = 邏輯記錄檔名, MAXSIZE = 10240); -- 10 GB 上限
風險:達上限後寫入失敗,應用報錯。必須配合**監控告警 (剩餘 < 20% 觸發)** 及時擴容或備份截斷。
| 場景 | 推薦做法 | 禁忌 |
|---|---|---|
| 例行維護 | 完整備份 → 記錄備份 → DBCC SHRINKFILE(記錄檔, 目標大小) → 索引重建 | AUTO_SHRINK ON |
| 記錄檔暴漲緊急處理 | 簡單模式 → CHECKPOINT → SHRINKFILE → 回完整模式 → 記錄備份 | 直接刪除 .ldf / 分離附加 |
| 資料檔釋放空間 | SHRINKFILE(資料檔, 目標) → 索引重建 (ONLINE=ON) | SHRINKDATABASE |
| 防止失控 | MAXSIZE 限制 + 監控告警 + 定期記錄備份 | 無限制成長 / 無監控 |