redo和undo的區(qū)別 ORACLE中,數(shù)據(jù)庫的redo與undo分別是什么呀,兩者是什么關系呢?
ORACLE中,數(shù)據(jù)庫的redo與undo分別是什么呀,兩者是什么關系呢?Redo用于日志記錄。撤消用于記錄數(shù)據(jù)備份。舉一個簡單的例子來說明(實際的過程要復雜得多):1。當您發(fā)出update語句時,O
ORACLE中,數(shù)據(jù)庫的redo與undo分別是什么呀,兩者是什么關系呢?
Redo用于日志記錄。撤消用于記錄數(shù)據(jù)備份。舉一個簡單的例子來說明(實際的過程要復雜得多):1。當您發(fā)出update語句時,Oracle首先將更改前后的信息寫入redo(當滿足某些條件時,日志寫入過程寫入日志文件)。然后將更新前的數(shù)據(jù)復制到undo中。三。用戶回滾后,Oracle將在undo中覆蓋數(shù)據(jù)。用戶提交后,Oracle可以根據(jù)重做信息恢復數(shù)據(jù)。(當然,您也可以使用undo來實現(xiàn)閃回)簡而言之,讓我們慢慢理解它。
ORACLE中,數(shù)據(jù)庫的redo與undo分別是什么呀,兩者是什么關系呢?
[session
事務處理
1。計算從更新的元組到原始元組的增量信息,并將增量復制到回滾段作為undo;
2。寫入重做日志以記錄對回滾段的更改?;貪L段也由緩沖區(qū)管理組織管理,這相當于對頁面的更改;
3。將緩沖區(qū)中相應的元組更新為新值,并回滾新值4。寫重做日志來記錄對頁面的更改(回滾段);
5。將已更改頁的狀態(tài)更改為dirty,表示該頁將被刷新
log flushed,并且當前事務的最后一個LSN(日志序列號)之前的重做日志將寫入持久存儲。
崩潰恢復過程
1。在啟動開始時,檢查數(shù)據(jù)庫是否在最后一次退出時崩潰;
2。找到最近的檢查點;
3。當定位到此檢查點時,滑動磁盤的數(shù)據(jù)頁并檢查校驗和。如果不正確,則表示該頁在上次寫入時未完成。使用雙寫緩沖區(qū)讀取內(nèi)存緩沖區(qū)中的正確頁并將其更新到內(nèi)存緩沖區(qū)中的頁;
4。按順序分析重做日志(從最后一個檢查點到最后一個LSN),以確定未提交的事務;
5。按順序執(zhí)行重做。這些重做日志不僅包括對數(shù)據(jù)段(write tuple)的更改,還包括對回滾段(write undo)6的更改。回滾所有未提交的事務。
mysql進行回滾事物的時候,是怎么樣根據(jù)redo log和undo里面記錄的sql進行的?
撤消日志用于存儲數(shù)據(jù)修改前的值。假設修改TBA表中id=2的行數(shù)據(jù),并將name=“B”改為name=“B2”,則使用undo log來存儲name=“B”的記錄。如果修改異常,可以使用undo log進行回滾操作,保證事務的一致性。
數(shù)據(jù)更改操作主要來自insert update delete,undo log分為兩種,一種是insert undo(插入操作),記錄要插入的唯一鍵值;一種是update undo(包括update和delete操作),記錄修改的唯一鍵值和舊列記錄。