sql-server – 关于数据库事务日志的问题

前端之家收集整理的这篇文章主要介绍了sql-server – 关于数据库事务日志的问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我读了以下声明:

sql Server doesn’t write data immediately to disk. It is kept in a
buffer cache until this cache is full or until sql Server issues a
checkpoint,and then the data is written out. If a power failure
occurs while the cache is still filling up,then that data is lost.
Once the power comes back,though,sql Server would start from its
last checkpoint state,and any updates after the last checkpoint that
were logged as successful transactions will be performed from the
transaction log.

并出现了几个问题:

>如果在sql Server发出电源后发生电源故障,该怎么办?
检查点和缓冲区高速缓存被执行写入之前
磁盘?缓冲区缓存中的内容是否永久丢失?
>事务日志也存储为磁盘文件,否则为
与实际的数据库文件不同.那我们怎么能保证
日志文件的完整性?

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

解决方法

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

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

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

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

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

猜你在找的MsSQL相关文章