英文解釋:
名詞:兩種流程,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(回滾)這個動做數據庫