Transaction
事務恢復和回滾
我認為:
**UNDO:**撤消寫入項操作包括檢查其日誌條目
$$ write_item, T, X, old_value, new_value $$並將數據庫中項目 X 的值設置為 old_value。UNDO 總是以與操作寫入日誌的順序相反的順序執行。 **REDO:**重做一個寫項目操作包括檢查它的日誌條目
$$ write_item, T, X, new_value $$並將數據庫中項目 X 的值設置為 new_value。 在事務恢復算法中,例如 Q & A Understanding Transaction Recovery中概述的算法
假設我們有一個時間表,例如:
R1(X) R2(Y) W1(X) C W2(Y)
其中
C
表示崩潰。根據算法,我們應該UNDO T1
, 但是REDO T2
,因為它在崩潰時仍然處於活動狀態。但是T2
還沒有任何寫操作,那麼UNDO
這裡究竟需要什麼?有什麼需要真的發生嗎?回滾的概念從何而來?這只是隱含在 a 中UNDO
嗎?
假設 R 表示讀,W 表示寫,那麼你提出的工作是這樣的:
W1(x) C
而已。讀取與恢復無關。崩潰表示結束,崩潰**後不能寫入。所以恢復的任務是重做一次寫入然後撤消它,因為沒有 Commit。
算法很簡單:
- 重做一切,按順序進行
- 以相反的順序撤消任何未送出的操作,為每個撤消的操作生成一個補償寫入。
一個很好的解釋是ARIES 論文。
另請參閱我的部落格上的如何閱讀和解釋 SQL Server 日誌。