Transaction

事務恢復和回滾

  • April 27, 2017

我認為:

**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 日誌

引用自:https://dba.stackexchange.com/questions/172127