Exchange 服务器事务日志截断

关于 Microsoft Exchange Server 日志

在向数据库文件提交事务之前,Exchange 会将该事务记录到事务日志文件中。为跟踪已将哪些记录过的事务提交至数据库,Exchange 使用检查点文件。一旦事务被提交至数据库且使用检查点文件进行跟踪,数据库将不再需要日志文件。

如果不删除日志文件,这些文件最终将占用掉所有可用磁盘空间,在将这些日志文件从磁盘中清除掉之前,只能离线使用 Exchange 数据库。使用循环日志记录并不是适合生产环境的最佳操作。如果启用了循环日志记录,Exchange 会在第一个日志文件的数据提交至数据库后覆盖此日志文件,您只能恢复最近一次备份的数据。

我们建议您在备份 Exchange 服务器后删除日志文件,因为日志文件已随其它文件一起进行了备份。因此,您将可在恢复之后前后滚动查看数据库。

有关事务日志记录的更多信息,请参阅 http://technet.microsoft.com/zh-cn/library/bb331958.aspx

使用启用 VSS 完整备份选项截断日志

最轻松的日志截断方法是使用启用 VSS 完整备份备份选项(选项 > 默认备份和恢复选项 > 默认备份选项 > 卷影复制服务 > 启用 VSS 完整备份)。在大多数情况下建议使用这种方法。

如果不希望启用此选项(例如,您需要保留在计算机上运行的其他 VSS 感知应用程序的日志),请遵循以下建议。

离线数据库日志截断

正常关闭后,数据库状态一致且数据库文件完整独立。这意味着您可以删除数据库或存储组的所有日志文件。

删除事务日志文件:

  1. 卸载数据库(在 Exchange 2010 中)或存储组的所有数据库(在 Exchange 2003/2007 中)。如需更多信息,请参阅:
  2. 删除数据库或存储组的所有日志文件。
  3. 加载已经卸载过的一个或多个数据库。

    如需更多信息,请参阅:

线上数据库日志截断

这种方法很适合那些经常使用且无法卸载的数据库。如果数据库处于使用状态,您只能安全删除那些已经将数据提交至数据库的事务日志文件。请勿删除那些尚未将数据提交至数据库的日志文件,这些文件对于在意外关闭情况下恢复数据库的一致性非常重要。

删除已提交的事务日志

  1. 使用 Eseutil 工具确定哪些日志已经提交至数据库:
    1. 执行 eseutil /mk <path to checkpoint file> 命令,其中 <path to checkpoint file> 是所需数据库或存储组的检查点文件的路径。
    2. 查看输出中的 Checkpoint 字段。例如,您应当会看到类似这样的内容:

      CheckPoint:(0x60B, 7DF, 1C9)

    第一个数字 0x60B 表示当前日志文件的十六进制日志生成编号。这意味着编号值小于此编号的所有日志文件均已提交至数据库。

  2. 删除编号值小于当前日志文件编号的所有日志文件。例如,您可以安全地删除 Enn0000060A.log、Enn00000609.log 以及编号更小的文件。
在备份之后进行日志截断

您可以使用脚本自动进行上述截断过程。如果您将该脚本添加至备份后命令,日志将在备份后立即截断。

这种方法假定您具备编写脚本的技能并且熟悉 Acronis Backup 命令行实用工具 (acrocmd)。有关 acrocmd 的详细信息,请参阅命令行参考

脚本中应包含以下步骤:

  1. 使用 mount 命令加载含有必要数据库的卷。

    模板:

    acrocmd mount --loc=<路径> --credentials=<用户名>,<密码> --arc=<存档名称> --volume=<卷编号> --letter=<代号>

    示例:

    acrocmd mount --loc=\\bkpsrv\backups --credentials=user1,pass1 --arc=my_arc --volume=1-1 --letter=Z

  2. 在已加载的卷中,使用 Eseutil 工具确定哪些日志已经提交至数据库。前文“线上数据库日志截断”的步骤 1 中介绍了具体步骤。
  3. 在相应的线上数据库或存储组中,删除备份中那些编号值小于当前日志文件编号的所有日志文件。
  4. 使用 umount 命令卸载已加载的卷。