关于数据库事务日志的问题

smw*_*dia 6 database sql-server

我读了以下声明:

SQL Server不会立即将数据写入磁盘.它保存在缓冲区缓存中,直到此缓存已满或直到SQL Server发出检查点,然后写出数据.如果在缓存仍在填满时发生电源故障,则该数据将丢失.但是,一旦电源恢复,SQL Server将从其上一个检查点状态开始,并且将在事务日志中执行作为成功事务记录的最后一个检查点之后的任何更新.

并出现了几个问题:

  1. 如果 SQL Server发出检查点之后和缓冲区高速缓存被执行写入磁盘之前发生电源故障怎么办?缓冲区缓存中的内容是否永久丢失?

  2. 事务日志也存储为磁盘文件,与实际数据库文件没有区别.那么我们怎样才能保证日志文件的完整性呢?

那么,真的没有真正的交易存在吗?这只是概率问题.

And*_*rew 8

该声明是正确的,因为数据可以写入缓存,但是错过了SQL Server使用称为"写入前进记录(WAL)"技术的重要观点.对日志的写入不会被缓存,只有在将事务记录写入日志后才会认为事务已完成.

http://msdn.microsoft.com/en-us/library/ms186259.aspx

如果发生故障,则会按照您的提及重播日志,但数据页仍然在内存中而不写入磁盘的情况无关紧要,因为修改日志已存储并可以检索.

没有真正的交易是不正确的,但如果你在简单的日志记录模式下运行,那么重播的能力就不存在了.

对于日志文件的完整性/与数据文件相同 - 正确的备份计划和适当的恢复测试计划 - 不仅要备份数据/日志并假设它们有效.