舊版本採用「備份截斷 + 收縮」兩步走:
USE YourDB;
GO
-- 1. 截斷日志(不記錄備份)
BACKUP LOG YourDB WITH NO_LOG;
GO
-- 或 DUMP TRANSACTION YourDB WITH NO_LOG; -- 同義詞
-- 2. 收縮文件
-- 方式 A:收縮整個數據庫
DBCC SHRINKDATABASE(YourDB);
GO
-- 方式 B:精準收縮日志文件(推薦)
-- 先查詢邏輯文件名:SELECT * FROM sysfiles;
DBCC SHRINKFILE (YourDB_Log);
GO
EXEC sp_detach_db 'YourDB';
GO
-- 手動刪除 .ldf 文件
EXEC sp_attach_single_file_db @dbname='YourDB',
@physname='C:\Path\YourDB.mdf';
GO
EXEC sp_dboption 'YourDB', 'autoshrink', 'TRUE';ALTER DATABASE YourDB MODIFY FILE (NAME=LogLogicalName, MAXSIZE=20MB);利用恢復模式切換實現無損截斷:
USE [master];
GO
ALTER DATABASE YourDB SET RECOVERY SIMPLE WITH NO_WAIT;
GO
ALTER DATABASE YourDB SET RECOVERY SIMPLE;
GO
USE YourDB;
GO
-- TRUNCATEONLY 僅釋放未使用空間,不移動數據頁,極快
DBCC SHRINKFILE (N'YourDB_Log', 11, TRUNCATEONLY);
GO
USE [master];
GO
ALTER DATABASE YourDB SET RECOVERY FULL WITH NO_WAIT;
GO
ALTER DATABASE YourDB SET RECOVERY FULL;
GO
| 維度 | SQL 2005 | SQL 2008+ |
|---|---|---|
| 日志截斷 | BACKUP LOG WITH NO_LOG(已棄用) | 切換 SIMPLE 恢復模式 |
| 收縮方式 | SHRINKFILE 移動頁面 | SHRINKFILE TRUNCATEONLY 秒級完成 |
| 業務影響 | 可能阻塞、碎片化 | 幾乎無阻塞,生產環境安全 |
WITH NO_LOG 破壞備份鏈。log_reuse_wait_desc 找出日志無法複用的真因。