我有一个相当大的 SQL Server 数据库,它使用简单恢复模式。我们实际上不需要第二次恢复,所以我希望我们保持这种模式。
由于某种原因,该数据库的事务日志很大 (410 GB),其中 99% 的空间未分配。
我尝试使用( DBCC SHRINKFILE (MyDatabase_log, 20000) )缩小文件,但它似乎不起作用。
有人知道为什么简单恢复模式数据库会有这么大的文件吗?我真的很想让它缩小。
最佳答案
这意味着您曾经有一个持续时间太长的事务,导致日志增长到 410GB。如果存在事件事务,则无法重用日志,因为无法删除回滚信息。例如,如果有人打开 SSMS 查询、启动事务、更新记录,然后去度假。事务将处于事件状态并强制日志增长,直到最终提交或回滚。当事务最终结束时,已使用的空间最终可以被回收,留下一个巨大的空日志文件。
另一种情况是,如果您在单个事务中更新了大约 200GB 的数据。日志将存储更改之前和之后的图像,从而消耗两倍的空间,并且无法重用,同样因为都是一个事务。
更新
我忽略了复制,这也是防止日志截断的一个因素。镜像也是如此,它是一种分布式事务(从技术上讲,它与“事件事务”相同,但 DTC 含义使其成为一种独特的情况)。完整列表和说明位于Factors That Can Delay Log Truncation .
关于sql-server - SQL Server 数据库在简单恢复模式下的巨大事务日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1195867/