UNDO SEGMENT的擴充套件和收縮

shuangoracle發表於2011-01-28
當發生一個DML操作時,伺服器程式會選擇一個undo segment。AUM採用的是事務繫結undo segment的演算法:
1、首先嚐試將每個undo段繫結一個事務,也就是每個undo segment上只被一個事務使用。
2、如果不能發現完全空閒的(也就是沒有與任何事務繫結)undo segment,則系統會嘗試將其他離線的undo segment離線。
3、如果沒有可用的undo segment進行聯機,則會嘗試建立一個新的undo segment。
4、如果上面步驟都不可行,也就是建立新的undo segment也沒有可用空間了,則事務繫結演算法才會嘗試去找最早被使用的那個undo segment。這種情況下,才可能出現多個事務在同一個undo segment中存在。

undo segment的收縮通過SMON實現:

1、每隔12個小時收縮一次,刪除那些idle狀態的extents。
2、當前臺程式進行DML而需要undo時,發現空間不夠用,則會喚醒SMON收縮一次。也就是說將其他undo segment裡暫時不用的extents拿來用。
使用AUM,並設定了undo_retention,undo塊存在四種狀態:
Active:正在使用該undo的事務還沒有提交或回滾。
Inactive:該undo上沒有活動的事務,該狀態的undo可以被其他事務覆蓋。
Expired:該undo持續inactive的時間超過undo_retention設定時間。
Free:該undo塊是空的,從來沒有被使用過。

當活動的事務使用undo segment時,在AUM模式下,事務可以在不同的undo segment之間交換undo空間,也就是在不同的undo segment
裡交換extents。當一個正在執行的事務需要更多的undo空間時,首先會重用當前undo segment裡的可用空間;如果當前undo segment
裡的可用空間不足,則會按照下面的步驟獲得所需要的extents:
1、獲取undo表空間裡可用的、空的extents。
2、獲取其他undo裡的expired狀態的extents。
3、如果undo表空間裡的資料檔案啟動了自動擴充套件(autoextend on),則資料檔案進行自動擴充套件。
4、如果undo表空間裡的資料檔案沒有啟用自動擴充套件,則獲取其他undo segment裡的inactive狀態的extents。
5、如果以上步驟均無法獲得可用空間時,報空間不足的錯誤。
[@more@]

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

相關文章