解釋DBMS中可恢復性的概念
非序列化排程的特徵如下:
事務可能是或可能不是一致的。
事務可能是或可能不是可恢復的。
所以,現在讓我們談談可恢復性排程。
我們都知道可恢復和不可恢復是非序列化技術,
不可恢復排程
如果一個事務從一個未提交的事務中執行髒讀操作,並在讀取該值的事務之前提交,則這樣的排程稱為不可恢復排程。
示例
讓我們考慮如下所示的兩個事務排程:
T1 | T2 |
---|---|
Read(A) | |
Write(A) | |
- | Read(A) ///髒讀 |
- | Write(A) |
- | Commit |
- | |
Rollback |
上述排程是不可恢復的,原因如下:
事務T2正在對A執行髒讀操作。
事務T2也在事務T1完成之前提交。
事務T1隨後失敗並回滾。
事務T2讀取了不正確的值。
最後,事務T2無法恢復,因為它已經提交。
可恢復排程
如果任何執行從未提交事務的髒讀操作的事務,並且其提交操作也被延遲,直到未提交的事務被提交或回滾,則此類排程稱為可恢復排程。
示例
讓我們考慮如下所示的兩個事務排程:
T1 | T2 |
---|---|
Read(A) | |
Write(A) | |
- | Read(A) ///髒讀 |
- | Write(A) |
- | |
- | |
Commit | |
Commit // 延遲 |
上述排程是可恢復的排程,原因如下:
事務T2對A執行髒讀操作。
事務T2的提交操作被延遲,直到事務T1提交或回滾。
事務稍後提交。
在上述排程中,現在允許事務T2提交,而T1尚未提交。
在這種情況下,事務T1失敗,而事務T2仍然有機會透過回滾來恢復。
廣告