存档的 CLFS 支持
通用日志文件系统 (CLFS) 支持通过维护存档尾部来存档专用日志。 调用 ClfsCreateLogFile 创建专用日志时,可以设置 fFlagsAndAttributes 参数的 FILE_ATTRIBUTE_ARCHIVE 标志,以指定 CLFS 应维护日志的存档尾部。 CLFS 维护存档尾部的日志称为 非临时日志。
假设你要对数据库执行事务,并且每个事务都有日志记录描述的多个更新。 提交特定事务并将其写入稳定存储后,可能不再需要描述该事务的日志记录。 也就是说,在系统发生故障时,重启恢复期间不需要日志记录。 但是,如果保存数据库的稳定存储介质发生故障,并且数据库最近未在不同的介质上存档,则数据库更新可能会丢失。
上一段介绍了存档数据库记录,但在其他情况下,你可能想要存档日志记录。 在任一情况下,存档均由客户端负责 (软件) 。 可以通过设置日志的存档结尾来跟踪已完成的存档。 存档尾部是尚未完成存档的最旧记录的日志序列号 (LSN) 。
非临时日志实际上有两个尾部:一个由基本 LSN 标记,一个由存档尾部标记。 可以通过调用 ClfsAdvanceLogBase (或 ClfsWriteRestartArea) 和 ClfsSetArchiveTail 来定位两个尾部。 通常,基本 LSN 指向事务回滚或重启恢复仍需要的最旧记录,存档尾部指向尚未执行存档的最旧记录。 请注意,存档尾部可能小于基本 LSN,也可能大于基本 LSN。
重复调用 ClfsReadNextLogRecord 以读取由以前的 LSN、撤消下一个 LSN 或用户 LSN 链接的记录链时,基本 LSN 和存档尾部非常重要。 ClfsReadNextLogRecord 不会读取 LSN 小于存档尾部和基本 LSN 的记录。 但是,它将读取 LSN 位于存档尾部和基本 LSN 之间的记录。 有关后续记录链的详细信息,请参阅 从 CLFS 流读取数据记录。