突然停电后 如何保证事务的正确保存?
事务中的持久性:由于性能的原因事务操作中,并不是数据每次被修改后立即被写入磁盘,那么当被修改后的数据存在中缓存中,但尚未写入磁盘中时,突然断电后会导致缓存中的数据丢失,那当恢复供电后,如何保证被那部分被修改后的数据能够正确写入磁盘?
还需补充一点是:事务的提交操作也不是把事务修改的数据直接写入磁盘,那当事务已提交后,那还未被写入硬盘,这时停电了,恢复供电后,如何保证被那部分被修改后的数据能够正确写入磁盘,此时缓存中的数据应该因为停电而消失了吧?
------解决方案--------------------根据事务的原子性,一旦提交了,即使因为停电使得不能够写入硬盘,当数据库再次启动时,数据库会自动检查事务将其写入硬盘
------解决方案--------------------提交的事务会先在日志里面存放,断电之后,已提交但是未写入硬盘也就是mdf文件里面的,会写进去,未提交的,会在日志中回滚操作。
------解决方案--------------------所有未来得及写盘的数据
全部丢失,即使已提交到缓冲区,就这么简单,MS当然不会说得这么直接,“恢复到断电一刻的状态”如果抠字眼MS纯属吹水。
先写日志只不过保证事务的一致性,未提交的回滚,已提交的前滚,这里提交是以写入日志文件为准。
------解决方案--------------------
如果还未写入日志文件,断电就丢失了。
------解决方案--------------------断电最大的危害是硬盘坏导致sql坏
------解决方案--------------------事务就是保证要么全部执行,要么都不执行,一旦提交,应该会保证事务的完整性的。不论是否刚好停电。个人意见,看哪位高手能验证下。。。