排程的可恢復性


有時,由於軟體問題,系統崩潰或硬體故障,事務可能無法完全執行。 在這種情況下,失敗的事務必須回滾。 但是其他一些事務也可能使用了失敗的事務所產生的值。 所以我們也必須回滾那些事務。

上表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讀取和寫入。 所以這是一個級聯較少的可恢復排程。