《深入解析Oracle》第八章,回滾與撤銷

louloueva發表於2009-04-15

又隔了相當長的一段時間才寫總結
第七章的Redo,是用於解決資料庫故障的
而本章的內容,是用於支援資料庫讀一致和可撤銷操作的
可以將未修改後提交的資料恢復到修改前

在某個事務為完成提交之前
使用者可以撤銷此次此事務內的修改
而事務進行中出現問題的話,Oracle也會自動回滾,恢復原樣
為了實現這種功能,類似Redo,Oracle用Undo來記錄相關資訊
insert、update、delete的相關資訊記錄在Undo表空間的回滾段內
記錄的資訊量,insert最少(只需新增記錄的rowid)
update其次(記錄所修改的舊值),delete最多(記錄所刪除記錄的整行資料)
如一事務的修改還未提交,另一事務所查詢的數值會有Undo資訊提供
個人以前曾總結過UNDO_RETENTION(儘量達到的儲存時長)引數
和Undo表空間的GUARANTEE(是否對儲存時長強制保證)選項
V$ROLLSTAT和V$ROLLNAME可以用來查詢資料庫當前回滾段的相關資訊
當事務提交後,Oracle一般會清除事務的相關資料,此操作成為塊清除
塊清除分為快速塊清除(如資料塊未寫回資料檔案,事務提交後便立即清除ITL、鎖等相關資訊)
延時塊清除(資料塊已寫回,清除作業會在下次訪問資料塊的時候進行)

以前還了解過另一個和Undo有關的資料庫恢復特性,閃回
此特性是從9i開始提供的
如果相關的Undo資訊還沒有被後來的事務所覆蓋
使用者便可以通過閃回查詢對資料庫進行極為簡便的恢復操作
另外,Oracle11g中
可以優化Undo表空間備份(跳過已提交事務的Undo資訊備份),還可以對Undo進行歸檔儲存

Undo回滾段的使用,可能會引發ORA-01555錯誤(回滾段被重用,相關Undo資訊被覆蓋)
適當設定UNDO_RETENTION值,GUARANTEE功能,以及Undo表空間,可以有效減少問題的發生率

本章還有很多篇幅是作者用轉儲方式探索回滾段相關原理的
看了一遍……只看明白一部分而已……以後有待再次深入
距離第一階段完結的日子不遠了 ^_^

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/556359/viewspace-589339/,如需轉載,請註明出處,否則將追究法律責任。

相關文章