![即使日志文件有 99% 的可用空间,SQL 也不会收缩日志文件,并会出现“所有逻辑日志文件都在使用中”错误](https://linux22.com/image/500933/%E5%8D%B3%E4%BD%BF%E6%97%A5%E5%BF%97%E6%96%87%E4%BB%B6%E6%9C%89%2099%25%20%E7%9A%84%E5%8F%AF%E7%94%A8%E7%A9%BA%E9%97%B4%EF%BC%8CSQL%20%E4%B9%9F%E4%B8%8D%E4%BC%9A%E6%94%B6%E7%BC%A9%E6%97%A5%E5%BF%97%E6%96%87%E4%BB%B6%EF%BC%8C%E5%B9%B6%E4%BC%9A%E5%87%BA%E7%8E%B0%E2%80%9C%E6%89%80%E6%9C%89%E9%80%BB%E8%BE%91%E6%97%A5%E5%BF%97%E6%96%87%E4%BB%B6%E9%83%BD%E5%9C%A8%E4%BD%BF%E7%94%A8%E4%B8%AD%E2%80%9D%E9%94%99%E8%AF%AF.png)
我有一个日志文件,它已经增长到 32GB 并占满了我的硬盘。因此,我进行了事务日志备份,现在当我执行“DBCC SQLPERF ( LOGSPACE )”时,它显示我的日志文件的 99% 都是空白空间,这很好:
DBCC SQLPERF ( LOGSPACE )
Database Name Log Size (MB) Log Space Used (%) Status
abc 32140.02 0.3069714 0
现在我想缩小文件大小(它应该只有几兆!),所以我这样做:
DBCC SHRINKFILE ( abc_log )
在 SSMS 中的查询结果中,我得到以下内容:
Results tab:
DbId FileId CurrentSize MinimumSize UsedPages EstimatedPages
14 2 4113923 128 4113920 128
在“消息”选项卡中,有以下这条信息:
Cannot shrink log file 2 (abc_log) because all logical log files are in use.
(1 row(s) affected)
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
这是怎么回事?
答案1
等待一个安静的时间并进行事务日志备份,然后立即进行收缩。
答案2
您没有提到您的 SQL Server 版本。根据“SQL Server 内部”, “(在 7.0 中)... 物理收缩只能从日志末尾进行,活动部分永远无法收缩。为了解决这种情况,您必须在截断日志后输入一些虚拟事务,以强制日志的活动部分移动到文件的开头”。更高版本应该会为您做到这一点。
半小时后缩小可能只是自动缩小(您刚刚打开该选项吗?)开始起作用。它每 30 分钟缩小一次。
答案3
我是一个糟糕的 SQL 管理员,通常只是将数据库更改为简单恢复模式,收缩,然后将其改回完整模式。我猜这在你依赖完整模式进行镜像的情况下不会起作用。
答案4
我确实有我的网站中的程序就是这样的。
无论何时我都需要。