SQL Server Transaction log 的Truncation and Shrink
何时需要截断并收缩Transaction log?
当数据库的恢复模式为Full Recovery时,如果没有定期对log进行备份,会导致log的持续增长。
使用下面命令查看log的情况:
DBCC LOGINFO;
0表示可以重用,2表示不可重用。
如何截断Transaction Log
USE MASTER
ALTER DATABASE database-name SET RECOVERY SIMPLE;
如何Shrink Transaction Log
USE database-name
DBCC SHRINKFILE(N'',2,TRUNCATEONLY);
USE master
ALTER DATABASE database-name SET RECOVERY FULL;
说明:
- TRUNCATION是通过备份log操作或将数据库设置为SIMPLE Recovery模式的checkpoint操作完成的。它将不包含活动log记录的VLF标记为reusable,它是逻辑操作,不会改变log的物理大小。为了减小log的物理大小,需要通过shrink操作,删除log文件尾部的非活动的VLF。
查看log file的大小
SELECT instance_name as [Database],
cntr_value as "LogFullPct"
FROM sys.dm_os_performance_counters
WHERE counter_name LIKE 'Percent Log Used%'
AND instance_name not in ('_Total', 'mssqlsystemresource')
AND cntr_value > 0;