有关服务器重新启动时事务ROLLBACK的混淆

时间:2017-12-29 23:00:20

标签: sql-server

以下是SQL Server 461培训套件的除外 -

  

[...]如果数据库服务器在事实之前意外关闭   成功提交可以写入日志,当SQL Server启动数据库时,事务将回滚,任何数据库更改都会撤消。

Microsoft页面(https://msdn.microsoft.com/en-us/library/jj835093(v=sql.120).aspx#WAL)读取,

  

必须先将日志记录写入磁盘,然后才能从缓冲区缓存中删除关联的脏页并将其写入磁盘。   [...]提交事务时,日志记录将写入磁盘。

任何尚未提交的事务都不会将其日志记录刷新到磁盘,因此不会将具有数据修改的脏页刷新到磁盘。

我只能看到尚未刷新到磁盘的前滚更改(来自已提交的事务),但这种回滚方案似乎不可能,因为磁盘上永远不会有更改(从非提交的事务)开始用。

我误解了哪一部分?

1 个答案:

答案 0 :(得分:4)

  

任何未被COMMITed的事务都不会将其日志记录刷新到磁盘

这不正确。在提交时,必须将与事务相关的所有日志记录刷新到磁盘,但这肯定会更早发生。在持久保存该部分日志之前,它不必等待所有事务提交。

  

磁盘永远不会有变化(来自未经授权的交易)   开头。

这不正确。

未提交的交易的更改可以在永久记录在交易日志中后立即写入光盘。

checkpoint发生一次。

当然,不允许将这些更改写入光盘上的数据文件,直到具有这些更改的事务日志被刷新到光盘,因为无法恢复。