dbms如何在事务期间保持原子性?

时间:2019-07-26 06:53:23

标签: database transactions atomicity acid

我正在阅读有关dbms的ACID属性,其中1个属性是 Atomicity (原子性)。

http://ecomputernotes.com/database-system/rdbms/transaction

场景:

假设在执行交易Ti之前,帐户A和B的值分别为Is000和Rs.2000。

现在,假设在执行Ti的过程中发生了电源故障,导致Ti无法成功完成。故障点可能在完成Write(A,a)之后且在Write(B,b)之前。这意味着将执行A中的更改,但不会执行B中的更改。因此,帐户A和Bare的值分别为Rs.950和Rs.2000。由于这次失败,我们损失了50卢比。

现在,我们的数据库处于不一致状态。

我的问题是在断电的情况下导致我们进入不一致状态,我们如何从中恢复?

我们可以在应用程序级别/代码级别做到吗?

有多少种方法可以恢复?

1 个答案:

答案 0 :(得分:0)

通常来说,这些方法可能在一个数据库与另一个数据库之间有所不同,但是通常DBMS会通过这种方式确保原子性:

当收到新的数据更改请求时,数据库首先将该请求写入表示更改向量的特殊日志中。仅当成功写入此记录后,才能提交事务。

万一发生电源故障,此日志将持续存在。数据库可以使用此日志从不一致状态中恢复,并一一应用更改。

例如,此Oracle数据库中的日志称为Redo Log。在PostgreSql中,它称为WAL