当日志达到完整大小时写入事务日志

时间:2015-04-30 08:35:41

标签: sql-server transaction-log

假设我们的数据库定义了事务日志initial size到100MB,而maxsize是无限的。

SQL Server将从开始​​到结束顺序写入日志。在一本书中我找到了下一句话:

  

当SQL Server按大小定义到达文件末尾时   当它被设置时,它将再次环绕到开头,   寻找可用的空间。 SQL Server可以无需包装   有空闲虚拟时增加物理日志文件大小   交易空间。 SQL时,虚拟事务日志空间变为空闲   服务器可以将事务日志中的数据写入底层   数据库中的表。

最后一部分让我很困惑。最后一句是什么意思?这是否意味着SQL Server用新事务覆盖旧的,已提交的事务?

据我所知,情况并非如此,因为在完成备份之前必须提交所有交易。

我不知道我是否足够清楚,如果需要一些解释,我会更新帖子。

2 个答案:

答案 0 :(得分:1)

这仅适用于SIMPLE事务记录:

  

当SQL Server可以将数据从事务日志写入数据库中的基础表时,虚拟事务日志空间变为空闲。

这意味着,一旦事务实际写入物理表,事务日志中就不再需要它们了。因为在这一点上,停电或其他灾难性故障不再导致交易丢失"因为它们已经被保留到磁盘上。

无需等到备份完成。但是,如果您需要完整的时间点恢复,则可以使用FULL事务日志记录,在这种情况下,不会覆盖任何事务日志。

答案 1 :(得分:0)

如果满足以下所有条件,则事务日志中不再需要日志记录:

它所属的交易已经提交。 它更改的数据库页面全部由检查点写入磁盘。 备份(完整,差异或日志)不需要日志记录。 任何读取日志的功能(例如数据库镜像或复制)都不需要日志记录。

进一步阅读,

https://technet.microsoft.com/en-us/magazine/2009.02.logging.aspx

https://technet.microsoft.com/en-us/library/jj835093%28v=sql.110%29.aspx