數(shù)據(jù)庫的redo與undo分別是什么呀?
會
事務處理過程
update 或Insert操作:
1.計算更新后tuple到原tuple的delta信息,把這個delta復制到回滾段,作為undo;
2.寫redo日志,記錄對回滾段的更改,回滾段也是由緩沖區(qū)管理機構(gòu)管理,也是相當于對頁面(page)的更改;
3.把緩沖區(qū)中的對應tuple更新成新值,把新值的rollback pointer寫入undo(更改回滾段);
4.寫redo日志,記入對頁(回滾段)的更改;
5.將被更改的頁面的狀態(tài)改成dirty,表示要被刷盤
事務提交操作:
日志刷盤,當前事務的對應的最后的LSN(Log Sequence Number)之前的redo日志都被寫入持久化存儲。
崩潰恢復過程
1.啟動開始時,檢測是數(shù)據(jù)庫在上次退出時是否發(fā)生崩潰;
2.定位到最近的一個檢查點(checkpoint);
3.定位在這個檢查點時刷磁盤的數(shù)據(jù)頁,檢查校驗checksum。如果不正確,說明這個頁在上次寫入是不完整的,從雙寫緩沖(doublewrite buffer)里把正確的頁讀出來,更新到內(nèi)存緩沖區(qū)中的頁;
4.順序地(從上個檢查點開始到最后一個LSN)分析redo日志,標識出未提交事務;
5.順序執(zhí)行redo,這些redo日志不僅包含對數(shù)據(jù)段的更改(寫tuple), 也包括對回滾段的更改(寫undo log);
6.回滾所有未提交的事務。