时间:2022-10-30 00:30:01 | 来源:信息时代
时间:2022-10-30 00:30:01 来源:信息时代
可恢复性 : 度量事务调度的一个属性,被用于确保事务的原子性。一个事务调度如果能够保证在执行COMMIT之前的任何时候,都是可以被撤销的,也就是它对数据库所作的影响可以被消除,则称该调度满足可恢复性。
按照事务原子性的要求,事务由于各种原因中止执行时,需要撤销事务已对数据库所做的修改(称为回退)。更进一步,当事务Ti中止执行时,还会引起依赖于事务Ti的事务Tj(即Tj读了Ti写的数据)也必须中止(称为级联回退)。事务调度必须确保上述的撤销操作是可以执行的。
1. 可恢复的调度
考虑图1中的调度。假定系统允许事务T2在执行了Read(A)和Write(B)后执行COMMIT操作,也就是在事务T1未结束前,T2已“成功”结束。如果事务T1在T2的COMMIT之后,由于某种原因引起失败,为保证事务的原子性,事务T1将执行ROLLBACK操作。但是事务T2已经不能再回退了。这种情况称为事务T2引用了未提交的数据,事务T1的失败,引起恢复工作不能彻底进行。这种调度称为“不可恢复”的调度。任何一对事务Ti和Tj,如果事务Tj读了事务Ti写的数据值,那么Tj的COMMIT操作必须在Ti的COMMIT操作之后。满足上述条件的调度称为可恢复的调度(recoverable schedule)。
T1 | T2 |
Read(A) Write(A) | |
Read(A) Write(B) /*COMMlT*/ | |
Read(B) /*ROLLBACK*/ |
图1 不可恢复的调度
T1 | T2 | T3 |
Read(A) Read(B) Write(A) | ||
Read(A) Write(A) | ||
Read(A) |
图2 关于无级联回退调度