
英文解釋:
名詞:兩種流程,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(復原)這個動作