有时由于软件问题, 系统崩溃或硬件故障, 交易可能无法完全执行。在这种情况下, 失败的事务必须回滚。但是某些其他交易也可能使用了失败交易产生的价值。因此, 我们还必须回滚这些事务。
文章图片
上表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的提交。
文章图片
【DBMS时间表的可恢复性】上面的表3显示了具有两个事务的时间表。事务T1读取和写入A并提交, 并且该值由T2读取和写入。因此, 这是一个不可恢复的级联计划。