是否有截断大型事务日志的替代策略? (> 200GB)

Is there an alternate strategy for truncating a large transaction log? (> 200gb)

我正准备针对类似问题尝试其他答案之一,但想问一下截断事务日志对于 200gb 的日志和我见过的很多 20gb 左右的示例是否会有所不同?

其他问题采用 20gb 的事务日志并将其减少到 1mb,对于 10 倍大小的事务日志,策略是否不同?

"Truncating the log" 是一个有歧义的术语。我假设您的意思是使用 DBCC SHRINKFILE 缩小事务日志的 LDF 文件。

不,过程没有显着差异。

请记住:您可能需要将日志文件缩小两次才能将其缩小到您想要的大小,因为您的事务日志将被使用。

  1. 运行 DBCC LOGINFO 对于所需的数据库,您将在事务日志中看到每个 VLF(虚拟日志文件)。状态为 2 的任何内容都处于活动状态并等待日志备份。如果您 运行 一个 DBCC SHRINKFILE 而不进行日志备份,您可以缩小到的最小大小是最大的 StartingOffset + FileSize,其中 Status 为 2。

  2. 如果您 运行 事务日志备份,当前正在使用的 VLF 的状态将保持为 2。它仍在使用中,因此它仍然处于活动状态。据我所知,DBCC LOGINFO 中列出的具有最大 FSeqNo 的 VLF 是当前正在使用的 VLF。这意味着如果您执行 LOG BACKUP 并立即 运行 DBCC SHRINKFILE,则最小大小将是具有最大 FSeqNo 的 VLF 的 StartingOffset + Filesize。您必须等待 VLF 填满并且服务器切换到新的 VLF,然后日志备份才会将此 VLF 标记为不活动,这样您就可以缩小 DBCC SHRINKFILE。

因此,缩小日志文件的最佳策略是:

  1. 分析您的数据库并activity找出问题所在和原因。
  2. 根据您的使用情况确定事务日志的最佳大小。
  3. 运行 备份日志。
  4. 运行 DBCC 收缩文件。
  5. 确定日志文件缩小了多少。
  6. 如果您的日志文件大小正确,则大功告成。
  7. 否则,监视 DBCC LOGINFO 以查看文件中 VLF 何时转入新的 VLF。
  8. 转到 3。

如果您需要生成事务日志数据以加快#6,请考虑运行宁索引重建。

请注意,以上#1 和#2 只有在您正确管理服务器的情况下才有可能。您以后需要重新访问服务器才能完成它们,但它们对于防止将来出现问题至关重要。

我还假设您没有 运行 简单恢复模式,因为使用简单恢复的数据库上的 200 GB 事务日志似乎相对不太可能。如果您正在 运行 进行简单恢复,这不太可能,那么您可以用 CHECKPOINT 命令替换上面的 BACKUP LOG。