Sql server DBCC SHRINKFILE以截断事务日志

Sql server DBCC SHRINKFILE以截断事务日志,sql-server,sql-server-2008,transactions,sql-server-2012,Sql Server,Sql Server 2008,Transactions,Sql Server 2012,我有一些数据库不会截断事务日志 这些数据库都处于简单的恢复模式,我们可以每天进行一次完整备份 我检查的第一件事是,是否有一些排序或打开的事务或阻止日志被重复使用的事情 SELECT name, log_reuse_wait_desc FROM sys.databases WHERE log_reuse_wait <> 0 回到简单的问题: USE [master] GO ALTER DATABASE mydb SET RECOVERY SIMPLE WITH NO_WAIT 这对

我有一些数据库不会截断事务日志

这些数据库都处于简单的恢复模式,我们可以每天进行一次完整备份

我检查的第一件事是,是否有一些排序或打开的事务或阻止日志被重复使用的事情

SELECT name, log_reuse_wait_desc
FROM sys.databases
WHERE log_reuse_wait <> 0
回到简单的问题:

USE [master]
GO
ALTER DATABASE mydb SET RECOVERY SIMPLE WITH NO_WAIT
这对日志备份进行了排序,但我仍然存在磁盘空间不足的问题

因此,我拼命运行以下命令:

DBCC SHRINKFILE (N'wslogdb70_27_log', 0, TRUNCATEONLY)
我希望这会截断事务日志,而不是缩小它

  • 我说得对吗
  • 有没有任何文章/书提到这一点

首先,如果数据库处于
简单
恢复中,则不能将
日志备份
作为日志重用等待,因为除非恢复模式为
完全
批量
,否则甚至无法进行日志备份

此外,根据:

TRUNCATEONLY选项不会移动日志中的信息,但会从日志文件的末尾删除非活动VLF

要收缩日志文件,请使用

DBCC SHRINKFILE (wslogdb70_27_log, X)
其中,
X
是以MB为单位的目标大小

注意不要将日志缩小太多,它需要文件中的一些可用空间才能工作,否则它将再次自动增长

关于自动增长,请尝试以MB为单位指定自动增长因子,而不是以百分比为单位。具体的大小取决于您没有提到的一些因素(例如,日志和数据文件的大小)

实际上,监视数据库并进行相应调整是您的最佳选择

DBCC SHRINKFILE (N'wslogdb70_27_log', 0, TRUNCATEONLY)
根据文档,SQL Server 2008 R2对我来说似乎运行良好-NOTRUNCATE仅适用于数据文件。日志文件不受影响…TRUNCATEONLY选项不会移动日志中的信息,但会从日志文件末尾删除非活动VLF。
DBCC SHRINKFILE (N'wslogdb70_27_log', 0, TRUNCATEONLY)