如何在未知的未备份时间后收缩 SQL 服务器中的日志文件?

How to shrink log file in SQL Server after unknown period of not being backed up?

我最近接手了一个已经使用了 2-3 年的数据库的管理,它没有适当的事务日志维护计划。数据库文件为 8 GB,但事务日志文件高达 54 GB。我开始备份日志文件,我需要回收那个驱动器 space。我将我的数据库与我公司内已制定适当维护计划的其他站点进行了比较,它们的事务日志大约为 4 GB,这是我所期望的。这是我第一次 运行 遇到这个问题。

我对数据库进行了完整备份,并制定了初始事务日志维护计划,但我需要缩小这个 *.ldf 文件,因为它太不成比例了。我搜索了 Stack Overflow 留言板,希望能找到类似的情况。基于该研究,我尝试了 DBCC SHRINKFILE,但没有产生我预期的结果。我将数据库恢复到原始状态(就地超大日志文件)并尝试了 Full-Simple-Full 恢复技术来 t运行 分类日志,但仍然无法回收 space。我什至尝试删除 .ldf 并完成清除(恢复挂起)状态的过程。又回到了DBCC CHECKDB修复功能,但是清除了(Recovery Pending)状态后,根本无法备份事务日志。我开始收到消息 42000 错误 50000,其中还引用了错误 3013。最后,我删除了整个混乱并将其恢复到原始状态。我已尝试尽可能详细,如有必要,我会很乐意澄清或阐述。正如我所说,这是我第一次 运行 进入这样的领域,但我总是从头开始我的项目。这是我第一次跳进别人建的东西中间,拿到手就坏了。

ALTER DATABASE [DBName] SET EMERGENCY;

GO

ALTER DATABASE [DBName] set single_user

GO

DBCC CHECKDB ([DBName], REPAIR_ALLOW_DATA_LOSS) WITH ALL_ERRORMSGS;

GO 

ALTER DATABASE [DBName] set multi_user 

GO

我的预期结果是未损坏的事务日志,其大小适合我的数据库。让这成为一个警示故事,并提醒您在接受对其他人搞砸的管理之前提出所有问题。

如果您使用的是 2008 或更早版本,您可以尝试 'BACKUP LOG WITH TRUNCATE_ONLY'

否则将数据库切换到简单恢复,这将清除日志。 然后 运行 DBCC SHRINKFILE 缩小文件大小。