undo與redo的執行機制

2021-04-17 03:19:08 字數 1069 閱讀 3991

撤消與重做(

undoand

redo)

undo

回退段中的資料是以「回退條目」方式儲存。

回退條目=塊資訊(在事務中發生改動的塊的編號)+在事務提交前儲存在塊中的資料

在每乙個回退段中oracle都為其維護一張「事務表」

在事務表中記錄著與該回退段中所有回退條目相關的事務編號(事務scn&回退條目)

redo

重做記錄由一組「變更向量」組成。

每個變更變數中記錄了事務對中某個塊所做的修改。

當使用者提交一條commit語句時,lgwr程序會立刻將一條提交記錄寫入到重做日誌檔案中,然後再開始寫入與該事務相關的重做資訊。

#事務提交成功後,將為該事備生成乙個系統變更碼(scn)。事務的scn將同時記錄在它的提交記錄和重做記錄中。

commit

提交事務前完成的工作:

·在sga區的回退快取中生成該事務的回退條目。在回退條目中儲存有該事務所修改的資料的原始版本。

·在sga區的重做日誌快取中生成該事務的重做記錄。重做記錄中記載了該事務對資料塊所進行的修改,並且還記載了對回退段中的資料塊所進行的修改。快取中的重做記錄有可能在事務提交之前就寫入硬碟中。

·在sga區的資料庫緩豐中記錄了事務對資料庫所進行的修改。這些修改也有可能在事務提交之前就寫入硬碟中。

提交事務時完成的工作:

·在為該事務指定的回退段中的內部事務表內記錄下這個事務已經被提交,並且生成乙個惟一的scn記錄在內部事務表中,用於惟一標識這個事務。

·lgwr後程序式將sga區重做日誌快取中的重做記錄寫入聯機重做日誌檔案。在寫入重做日誌的同時還將寫入該事務的scn。

·oracle服務程序釋放事務所使用的所有記錄鎖與表鎖。

·oracle通知使用者事務提交完成。

·oracle將該事務標記為已完成。

rollback

回退事務完成的工作:

·oracle通過使用回退段中的回退條目,撤銷事務中所有sql語句對資料庫所做的修改。

·oracle服務程序釋放事務所使用的所有鎖

·oracle通知事務回退成功。

·oracle將該事務標記為已完成

undo與redo的執行機制

undo與redo的執行機制 撤消與重做 undo and redo undo 回退段中的資料是以 回退條目 方式儲存。回退條目 塊資訊 在事務中發生改動的塊的編號 在事務提交前儲存在塊中的資料 在每乙個回退段中oracle都為其維護一張 事務表 在事務表中記錄著與該回退段中所有回退條目相關的事務編...

undo與redo的執行機制

撤消與重做 undo and redo undo 回退段中的資料是以 回退條目 方式儲存。回退條目 塊資訊 在事務中發生改動的塊的編號 在事務提交前儲存在塊中的資料 在每乙個回退段中oracle都為其維護一張 事務表 在事務表中記錄著與該回退段中所有回退條目相關的事務編號 事務s 回退條目 redo...

資料庫的REDO和UNDO機制

redo undo機制是在資料庫引擎曾實現的。undo機制如下 假設有a b兩個資料,值分別為1,2。a.事務開始.b.記錄a 1到undo log.c.修改a 3.d.記錄b 2到undo log.e.修改b 4.f.將undo log寫到磁碟。g.將資料寫到磁碟。h.從磁碟檔案中刪除之前的und...