Redo 和Undo的區別和聯絡 詳細解釋

2021-08-26 07:17:25 字數 3297 閱讀 6355

redo和undo

1.1 redo及其作用

1.1.1redo的作用是恢復已提交的事務,從而保證無論在介質失敗還是例項失敗時,都可以恢復使用者已提交的事務,使資料庫達到一致狀態。

1.1.2redo功能的實現依賴於以下三個元件:

1.2redo資料量的測量

1.2.1用sql*plus內建的autorace功能統計(只能針對簡單的dml操作,無法統計儲存過程呼叫等複雜操作的日誌資訊):

set autotrace on statistics update big_table set object_name=lower(object_name) where rownum<10;

1.2.2.通過動態效能檢視v$mystat檢索。例如:

select a.name, b.value from v$statname a, v$mystat b where a.statistic# = b.statistic# and lower(a.name) like 'redo size';

2 undo及其作用

2.2.1undo的作用是:

回滾操作;

支援讀一致性;

恢復失敗的事務。

2.2.2undo的實現是通過undo表空間內的undo段來實現的。每個事務只被分配乙個undo段,undo段可以服務於多個事務。

2.2.3undo機制只是邏輯地把資料恢復到修改前的狀態,而不是物理地恢復。

語句中使用以下動態效能檢視查詢當前事務使用的undo塊數:

v$mystat:取得會話id;

v$transaction:找出事務使用的undo塊數。

事務提交或回滾時會釋放undo塊占用的空間。

select used_ublk from v$transaction where addr = ( select taddr from v$session where sid = ( select sid from v$mystat where rownum = 1 ) );

9.3 redo與undo的比較

undo

redo

記錄

怎樣還原修改

怎樣建立修改

用於

回滾、讀一致性

前滾、資料庫修改

儲存於

undo段

redo日誌檔案

保護

多使用者系統中的讀一致性

損失的資料

3.4 undo管理

管理目標是避免出現兩種錯誤:

vora-01650: unable to extend rollback segment

vora-01555: snapshot too old

管理方式落實為正確配置三個引數和乙個還原表空間屬性:

undo_management

undo_tablespace

undo_retention

retention guarantee

9.5 提交和回滾處理

commit操作需要的時間很「平」,與事務的大小沒有直接關係。

rollback操作所需的時間與事務所修改的資料量直接相關。

因此在設計事務時,不要考慮事務的大小和多少,而應以所執行的操作是否構成乙個邏輯工作單元作依據。

提交前後完成的操作

提交前可能完成的操作

在sga中生成undo塊

在sga中生成已修改的資料塊

在sga中生成前兩項對應的redo日誌

如果需要,前面的某些資料可能已經重新整理輸出到磁碟

得到所需的所有鎖

提交時要完成的操作

為事務生成scn

lgwr把剩餘所有快取重做日誌和scn寫入日誌檔案

釋放鎖

對緩衝區中的資料塊進行塊清理

回滾前後完成的操作

v回滾前可能完成的操作

在sga中生成undo塊

在sga中生成已修改的資料塊

在sga中生成前兩項對應的redo日誌

如果需要,前面的某些資料可能已經重新整理輸出到磁碟

得到所需的所有鎖

v回滾時要完成的操作

撤銷已做的所有修改

釋放鎖

Redo 和Undo的區別和聯絡 詳細解釋

redo和undo 1.1 redo及其作用 1.1.1redo的作用是恢復已提交的事務,從而保證無論在介質失敗還是例項失敗時,都可以恢復使用者已提交的事務,使資料庫達到一致狀態。1.1.2redo功能的實現依賴於以下三個元件 1.2redo資料量的測量 1.2.1用sql plus內建的autor...

redo和undo的區別

redo undo datafile insert一條記錄時,表跟undo的資訊都會放進 redo 中,在commit 或之前,redo 的資訊會放進硬碟上.故障時,redo 便可恢復那些已經commit 了的資料.redo 每次操作都先記錄到redo日誌中,當出現例項故障 像斷電 導致資料未能更新...

redo和undo的區別

redo undo datafile insert一條記錄時,表跟undo的資訊都會放進 redo 中,在commit 或之前,redo 的資訊會放進硬碟上.故障時,redo 便可恢復那些已經commit 了的資料.redo 每次操作都先記錄到redo日誌中,當出現例項故障 像斷電 導致資料未能更新...