sql数据库联机丛书里面有这么一句大家可以看看
如果从来没有从事务*志中删除*志记录,逻辑*志就会一直增长,直到填满容纳物理*志文件的磁盘上的所有可用空间。在某个即时点,必须删除恢复或还原数据库时不再需要的旧*志记录,以便为新*志记录腾出空间。删除这些*志记录以减小逻辑*志的大小的过程称为截断*志。
永远不能截断事务*志的活动部分。*志的活动部分是在任何时间恢复数据库所需的*志部分,因此必须有回滚所有未完成的事务所需的*志映像。这部分必须始终在数据库中,因为一旦服务器发生故障,在服务器重新启动时必须用它恢复数据库。*志活动部分起点处的记录由最小恢复*志序号 (MinLSN) 标识。
为数据库选择的恢复模式决定了在数据库内,必须在活动部分之前保留的事务*志量。虽然 MinLSN 之前的*志记录对恢复活动事务没有作用,但在使用*志备份将数据库还原到故障点时,必须用这些记录前滚修改。如果由于某种原因丢失了数据库,则可以通过还原上次的数据库备份,然后还原自该数据库备份后的每个*志备份来恢复数据。这意味着这些*志备份必须包含自数据库备份后所写入的每个*志记录。当维护事务*志备份序列时,*志记录直到写入*志备份时才能被截断。
MinLSN 之前的*志记录只用于维护事务*志备份序列。
在简单恢复模式中,不维护事务*志序列。MinLSN 之前的所有*志记录可以随时被截断,但在处理 BACKUP 语句时除外。NO_LOG 和 TRUNCATE_ONLY 是只对使用简单恢复模式的数据库有效的 BACKUP LOG 选项。
说明 tempdb 数据库始终使用简单恢复模式,不能切换到其它恢复模式。*志截断始终发生在 tempdb 中的检查点上。
在完全恢复模式和有*志记录的大容量恢复模式中,维护事务*志备份序列。MinLSN 之前的逻辑*志部分直到复制到某个*志备份时才能被截断。 *志截断在下列情况下发生:
执行完 BACKUP LOG 语句时。
在每次处理检查点时(如果数据库使用的是简单恢复模式)。这包括 CHECKPOINT 语句所产生的显式检查点和系统生成的隐式检查点。例外情况是如果检查点发生在 BACKUP 语句仍活动时,则不截断*志。有关自动检查点间隔的更多信息,请参见检查点和*志的活动部分。 事务*志在内部分成若干称为虚拟*志文件的部分。虚拟*志文件是截断的单元。当截断事务*志时,删除包含 MinLSN 的虚拟*志文件头之前的所有*志记录。有关虚拟*志文件的更多信息,请参见事务*志物理构架。
因此,按下面任一方式控制事务*志的大小:
在维护*志备份序列时,调度 BACKUP LOG 语句按间隔发生,以使事务*志不致增长到超过预期的大小。
当不维护*志备份序列时,指定简单恢复模式。 下图显示一个有四个虚拟*志的事务*志。创建数据库后没有截断过*志。逻辑*志从第一个虚拟*志的始端开始,而且从未使用过第四个虚拟*志中超过逻辑文件末端的部分。
下图说明*志截断后的样子。MinLSN 记录所在的虚拟*志始端之前的行被截断。
截断不减小物理*志文件的大小,但减小逻辑*志文件的大小。有关收缩物理*志文件大小的更多信息,请参见"收缩事务*志"。
请参见
BACKUP
设置数据库选项
事务*志备份
截断方法
免责声明:57sf.com登载此文出于传递更多信息之目的,并不意味着57sf.com赞同其观点或证实其描述
|