日誌檔 (LDF) 膨脹會佔滿磁碟、拖慢備份/還原、影響效能。
*.ldf 檔案*.mdf → 確認(自動建立新 1 MB LDF)風險:離線期間業務中斷;若 MDF 損壞則資料全失。
-- 截斷日誌
BACKUP LOG TestDB WITH NO_LOG;
-- 或
DUMP TRANSACTION TestDB WITH NO_LOG;
-- 收縮日誌檔至 1 MB
DBCC SHRINKFILE ('TestDB_log', 1);
注意:SQL Server 2008 起 WITH NO_LOG 已移除。
-- 1. 切換至簡單復原模式(自動截斷非作用中 VLF)
ALTER DATABASE TestDB SET RECOVERY SIMPLE;
-- 2. 收縮日誌檔
DBCC SHRINKFILE (N'TestDB_log', 1); -- 目標 1 MB
-- 3. 切回完整復原模式(生產環境必須)
ALTER DATABASE TestDB SET RECOVERY FULL;
-- 4. 立即進行完整備份 + 日誌備份,啟動新日誌鏈
BACKUP DATABASE TestDB TO DISK = '...';
BACKUP LOG TestDB TO DISK = '...';
DECLARE @dbname sysname = 'TestVFA';
DECLARE @logfile nvarchar(260), @datafile nvarchar(260);
-- 取得檔案路徑
SELECT @logfile = physical_name FROM sys.database_files WHERE type = 1 AND name = @dbname + '_log';
SELECT @datafile = physical_name FROM sys.database_files WHERE type = 0 AND name = @dbname;
-- 分離
USE master;
EXEC sp_detach_db @dbname = @dbname;
-- 刪除 LDF(需啟用 Ole Automation)
DECLARE @fso int, @hr int;
EXEC @hr = sp_OACreate 'Scripting.FileSystemObject', @fso OUT;
EXEC @hr = sp_OAMethod @fso, 'DeleteFile', NULL, @logfile;
EXEC @hr = sp_OADestroy @fso;
-- 附加單一 MDF(自動建立新 LDF)
EXEC sp_attach_single_file_db @dbname = @dbname, @physname = @datafile;
EXEC sp_configure 'show advanced options', 1; RECONFIGURE;
EXEC sp_configure 'Ole Automation Procedures', 1; RECONFIGURE;
日誌暴增首選「切簡單模式 → SHRINKFILE → 切回完整模式 → 完整備份」標準流程;分離附加法僅限維護窗口且無其他選項時使用。自動化請納入 Agent Job,並啟用日誌空間監控告警。