英文解釋:
名詞:兩種流程,redo重做流程,undo撤銷還原流程;或則是redo日誌與undo段的簡稱
動詞:redo即重做,undo即撤銷還原。
翻譯有時候爲了簡單,常把動詞和名稱混用。不同場景不同的使用。
1.redo記錄了什麼:
redo即redo日誌,記錄數據庫變化的日誌(區別我們常見的簡單的文本日誌,redo日誌裏面記錄的都是數據啊,表數據啊等等壓縮處理,但也很大)。
只要你修改了數據塊那麼就會記錄redo信息,當然nologging除外了。
修改的數據塊包括:表所在數據塊(表數據塊),索引所在數據塊(索引數據塊),以及undo段所在數據塊(undo數據塊)!!
2.undo記錄了什麼:
undo即undo段,是指數據庫爲了保持讀一致性,存儲歷史數據在一個位置。
爲什麼要保持讀一致性?
比如有兩個用戶訪問數據庫,當然併發羅。A是更改,B是查詢。
--A更改還沒有提交,B查詢的話,數據肯定爲歷史數據,這個歷史數據就是來源於UNDO段,
--A更改未提交,需要回滾rollback,回滾rollback的數據也來至於UNDO段。
結論:爲了併發時讀一致性成功,那麼DML操作,肯定先寫UNDO段。
3.前滾與回滾:
--方向相對性:前滾,是指從“以前正常點”往前,一直到崩潰點
回滾,是指從“崩潰點”往後,一直到數據一致性
(因爲前滾操作後,由於事務未提交的數據也寫入了“表數據塊”,所以要用Undo數據塊進行覆蓋
--詳細解釋:
前滾:
當實例崩潰時,可以使用redo從以前正常的點前滾到崩潰點。(前滾從一致性檢查點,“即當時檢查過所有的SCN是全部一致的時間點”,一直往前滾到崩潰的時間點)。
當數據庫回到一致性檢查點時,相當於之後什麼都沒有發生過,數據全被清空了。(穿越了!O(∩_∩)O~)
數據庫只好根據redo模擬人的操作,使用redo裏的信息重做(use redo log to redo),構造undo塊,表塊,索引塊等。
回滾:
構造的表數據塊中,有已修改的髒數據但未提交,就需要利用前滾中構造的undo數據塊裏的信息來undo撤銷還原,覆蓋回滾rollback羅(保持一致性啊,每種塊裏的scn號都一樣,那麼數據庫就可以打開了)。
4.undo與redo(流程)的聯繫:
因爲,數據在沒有commit前,是隨時從內存中寫入到表數據塊的,屬於髒數據。 數據庫崩潰後即使使用redo流程進行redo操作,但是髒數據還在,髒數據怎麼處理,就只能靠undo流程,使用undo數據塊的舊數據覆蓋了。
但是不管是髒的還是舊的,都在redo日誌中複製了一份。
注意:1.undo是一種“數據文件datafile”,具有表空間,當然具有塊block;
2.redo是一種“文件file”,沒有表空間。
3.數據庫在DML事務時,先創建undo
4.讀一致性與一致性(scn相同)的區別
5.undo與rollback的區別:在undo(撤銷還原流程)中會使用rollback(回滾)這個動作