收缩 SQL Server 事务日志

Kra*_*ker 8 sql-server backup restore sql-server-2012

我目前不得不处理失控的 SQL Server 事务日志。免责声明:我不是 dba,这不是我的专业领域,所以请耐心等待。

目前,我有一个500MB 的数据库的115GB事务日志文件,该文件(显然)在一段时间内管理不善,无法进入这种状态。

首要任务是在我们用完之前回收这个文件占用的磁盘空间!有人告诉我增加驱动器的大小不是一种选择,即使是暂时的,而且根据过去的增长,我们需要尽快采取行动。

据我了解,最好的方法是将数据库保持在完全恢复模式,但定期备份日志文件,在一段时间内对其进行监控并调整初始大小和增量以适应。一切都好。

鉴于我们在午夜定期进行完整的数据库备份,我是否可以安全地将数据库暂时置于简单恢复模式(在这些备份之一运行后),缩小日志文件以回收(几乎所有)空间和然后使用上述备份策略将其放回完全恢复?

我的想法是,如果这个时候发生了什么事情,我们可以简单地恢复完整备份而不使用日志。

更新

回复一些答案和评论的一些额外细节:

  • 我们确实希望保留进行时间点还原的能力,因此数据库应保持在完全恢复模式。

  • t-log 文件变得如此大的原因是它从未被备份过。验证为 log_reuse_wait_desc 返回“LOG_BACKUP”。

Pix*_*ted 4

该数据库的事务日志包含自上次事务日志备份或上次从简单恢复模式切换以来的所有事务。执行以下命令以获得有关 SQL Server 为何无法截断日志以及随后日志不断增长的明确答案。

SELECT  d.Name
        ,d.log_reuse_wait_desc
FROM    sys.databases d
ORDER BY
        d.name
Run Code Online (Sandbox Code Playgroud)

如果您想要时间点恢复,则将数据库保留在完整恢复模式中并进行频繁的日志备份。每个日志备份将包含自上次日志备份以来的所有事务。日志备份过程还负责清除日志并标记空间以供重用,即数据库中进行的下一个事务将以循环方式写入被截断日志的开头。日志的备份和重用可以防止日志文件增长。

如果您对时间点恢复不感兴趣并希望简化数据库的管理。然后将数据库设置为简单恢复模式并且不进行t-log备份。SQL Server会在每个事务提交后自动截断事务日志。这意味着一旦事务提交到日志,记录就会被下一个事务覆盖等。

无论哪种方式,一旦您做出这两个决定之一,您就可以将日志文件缩小到更合理的大小。请注意,理想情况下,您希望它足够大,这样它就不会增长,但又不能太大,以至于您需要再次缩小它。另请注意,您无法缩小日志的活动部分。

下载并部署https://ola.hallengren.com/数据库管理解决方案,涵盖备份、索引碎片、统计和 CHECKDB。

您可能还会发现通过右键单击对象资源管理器 > 报告 > 标准报告 >“磁盘使用情况”中的数据库返回的“磁盘使用情况”报告对于返回 t-log 中的可用空间很有用。

我还建议您搜索一下为什么从灾难恢复的角度来看保持日志链完整如此重要,以及从完整切换到简单会如何破坏日志链,从而使您面临数据丢失的风险。