有时,由于软件问题,系统崩溃或硬件故障,事务可能无法完全执行。 在这种情况下,失败的事务必须回滚。 但是其他一些事务也可能使用了失败的事务所产生的值。 所以我们也必须回滚那些事务。
上表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读取和写入。 所以这是一个级联较少的可恢复调度。