2009-10-07 89 views
4

我对如何在数据库系统中实现“常见”数据库事务感兴趣,例如MySQL。当数据库事务被损坏时是否有突破点?

假设实际将数据写入物理数据库存储不是原子操作(现在以时钟周期来讲),我不应该通过例如在某些情况下撕开电源电缆来破坏事务选择时刻?

回答

6

如果仔细编写数据库系统,应该没有时间点停电可能会损坏数据,并且发生停电时,不应丢失承诺的数据。

在实际更新数据之前,rdbms首先将数据写入事务日志。发生崩溃后,它会重播日志,将日志中的所有待处理更改复制到数据库中,并回滚日志中尚未完成的所有事务。只有在硬盘向日志报告完成的写入操作后,提交才会报告为成功。

1

数据库在更新时写入日志很常见。然后它可以告诉它没有设法完成其作为一个事务的操作,并使用日志来回滚更改。

+0

对不起 - 在重新启动时,它会检查日志并回滚 - 不是用电源:) – Davy 2009-10-07 20:34:14

2

数据库按照ACID属性。无论什么时候爆炸,至少有一种方法可以回滚到已知的正确状态。