在发生停电时,事务性系统如何保持一致性?例如,考虑下面在事务中执行的操作。
UPDATE table SET someColumn = someColumn + 1 WHERE <whatever>在突然停电的情况下,我们如何确保操作是否完成?
来自SQL server文档:
Server使用预写日志记录(WAL)算法,它保证在关联的日志记录写入磁盘之前不会将任何数据修改写入磁盘。这维护了事务的ACID属性。..。在从缓冲区缓存中删除关联的脏页并将其写入磁盘之前,必须将日志记录写入磁盘。
据我所知,使用上面的SQL增量操作的例子,会发生以下操作:
当突然关闭时,系统如何知道增量操作是否已经完成?它是如何从何时回滚的?(在将日志添加到事务日志之后,但在刷新更改到磁盘之前,会发生关闭吗?)
我还有一个(第二个)问题,和这个问题很相似。我们如何保证原子性?例如,
UPDATE table SET someColumn = someColumn + 1 AND otherColumn = otherColumn + 2 WHERE <whatever>如何确保在突然停电的情况下,字段otherColumn也将被更新,或者没有字段将被更新?
https://stackoverflow.com/questions/69139065
复制相似问题