📅  最后修改于: 2020-12-12 07:40:55             🧑  作者: Mango
有时由于软件问题,系统崩溃或硬件故障,交易可能无法完全执行。在这种情况下,失败的事务必须回滚。但是其他一些交易也可能使用了失败交易产生的价值。因此,我们还必须回滚这些事务。
上表1显示了具有两个事务的时间表。 T1读取和写入A的值,并且T2读取和写入该值。 T2提交,但随后,T1失败。由于失败,我们必须回滚T1。 T2还应该回滚,因为它读取T1写入的值,但是T2无法回滚,因为它已经提交。因此,这种类型的日程表称为不可恢复的日程表。
不可恢复的时间表:如果Tj读取Ti的更新值和Ti提交之前提交的Tj的更新值,则该时间表将是不可恢复的。
上表2显示了具有两个事务的时间表。事务T1读取和写入A,并且该值由事务T2读取和写入。但是后来,T1失败了。因此,我们必须回滚T1。 T2应该回滚,因为T2已读取T1写入的值。由于它在T1提交之前尚未提交,因此我们也可以回滚事务T2。因此可以通过级联回滚来恢复。
可通过级联回滚来恢复:如果Tj读取Ti的更新值,则该计划将可通过级联回滚来恢复。 Tj的提交被延迟到Ti的提交。
上面的表3显示了具有两个事务的时间表。事务T1读取和写入A并提交,并且该值由T2读取和写入。因此,这是一个不可恢复的级联计划。