welcome to 's blog...


公告

我的分类(专题)

日志更新

最新评论

留言板

链接

搜索


Blog信息




截断事务日志
aku1 发表于 2004-11-23 21:17:03

 

如果从来没有从事务日志中删除日志记录,逻辑日志就会一直增长,直到填满容纳物理日志文件的磁盘上的所有可用空间。在某个即时点,必须删除恢复或还原数据库时不再需要的旧日志记录,以便为新日志记录腾出空间。删除这些日志记录以减小逻辑日志的大小的过程称为截断日志。

永远不能截断事务日志的活动部分。日志的活动部分是在任何时间恢复数据库所需的日志部分,因此必须有回滚所有未完成的事务所需的日志映像。这部分必须始终在数据库中,因为一旦服务器发生故障,在服务器重新启动时必须用它恢复数据库。日志活动部分起点处的记录由最小恢复日志序号 (MinLSN) 标识。

为数据库选择的恢复模式决定了在数据库内,必须在活动部分之前保留的事务日志量。虽然 MinLSN 之前的日志记录对恢复活动事务没有作用,但在使用日志备份将数据库还原到故障点时,必须用这些记录前滚修改。如果由于某种原因丢失了数据库,则可以通过还原上次的数据库备份,然后还原自该数据库备份后的每个日志备份来恢复数据。这意味着这些日志备份必须包含自数据库备份后所写入的每个日志记录。当维护事务日志备份序列时,日志记录直到写入日志备份时才能被截断。

MinLSN 之前的日志记录只用于维护事务日志备份序列。

  • 在简单恢复模式中,不维护事务日志序列。MinLSN 之前的所有日志记录可以随时被截断,但在处理 BACKUP 语句时除外。NO_LOG 和 TRUNCATE_ONLY 是只对使用简单恢复模式的数据库有效的 BACKUP LOG 选项。

说明  tempdb 数据库始终使用简单恢复模式,不能切换到其它恢复模式。日志截断始终发生在 tempdb 中的检查点上。

  • 在完全恢复模式和有日志记录的大容量恢复模式中,维护事务日志备份序列。MinLSN 之前的逻辑日志部分直到复制到某个日志备份时才能被截断。

日志截断在下列情况下发生:

  • 执行完 BACKUP LOG 语句时。

  • 在每次处理检查点时(如果数据库使用的是简单恢复模式)。这包括 CHECKPOINT 语句所产生的显式检查点和系统生成的隐式检查点。例外情况是如果检查点发生在 BACKUP 语句仍活动时,则不截断日志。有关自动检查点间隔的更多信息,请参见检查点和日志的活动部分

事务日志在内部分成若干称为虚拟日志文件的部分。虚拟日志文件是截断的单元。当截断事务日志时,删除包含 MinLSN 的虚拟日志文件头之前的所有日志记录。有关虚拟日志文件的更多信息,请参见事务日志物理构架

因此,按下面任一方式控制事务日志的大小:

  • 在维护日志备份序列时,调度 BACKUP LOG 语句按间隔发生,以使事务日志不致增长到超过预期的大小。

  • 当不维护日志备份序列时,指定简单恢复模式。

下图显示一个有四个虚拟日志的事务日志。创建数据库后没有截断过日志。逻辑日志从第一个虚拟日志的始端开始,而且从未使用过第四个虚拟日志中超过逻辑文件末端的部分。

下图说明日志截断后的样子。MinLSN 记录所在的虚拟日志始端之前的行被截断。

截断不减小物理日志文件的大小,但减小逻辑日志文件的大小。有关收缩物理日志文件大小的更多信息,请参见"收缩事务日志"。


阅读全文 | 回复(0) | 引用通告 | 编辑


发表评论:

    昵称:
    密码: (游客无须输入密码)
    主页:
    标题:



Powered by Oblog.