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