?
? undo的作用是:解決oracle多用戶讀寫一致性,以及操作可撤銷或者回滾。
?
1.undo表空間是從10g開始進(jìn)行自動管理的,幾個參數(shù)如下:
? undo_management:回滾段手動管理還是自動管理
? undo_tablespace:為undo單獨(dú)定義的表空間;在自動管理模式下,使用哪個表空間
? undo_retention:在自動管理模式下,回滾段在非活動狀態(tài)下,回滾段中的數(shù)據(jù)被覆蓋前,系統(tǒng)的保留時間(秒)。
?
2.回滾段存儲的內(nèi)容
? ?insert操作:只記錄插入記錄的rowid,回滾時,只需要根據(jù)該rowid刪除記錄即可
? ?update操作:記錄要更新字段的鏡像,回滾時,通過該鏡像,覆蓋之前的值
? ?delete操作:完整地記錄一條數(shù)據(jù),回滾時,通過一個反向操作恢復(fù)數(shù)據(jù)。
? ? ? 通過上面比較,delete的花銷最大。所以,一個批量刪除失敗,回滾會花銷比較長的時間。同時,回滾的操作
?還要記錄redo日志。
?
3.oracle讀寫一致性
? ? ? ? ? ??
? ? 用戶A、B;一個在update,一個在select;
? ? 如果(1):Ty< T<Tz<Tx , 即在查詢中,數(shù)據(jù)有更新;但在update 的commit前,查詢結(jié)束;雖然有update操作,但select依然
? ? ? ? ? ? ? ? 可以通過回滾段的數(shù)據(jù)鏡像查詢出結(jié)果,這樣數(shù)據(jù)就保持了讀取一致性。
? ? 如果(2):Ty< T<Tx<Tz ,在查詢中,數(shù)據(jù)有更新;但在update 的commit前,查詢還未結(jié)束;這就導(dǎo)致select的查詢回滾段的數(shù)據(jù)
? ? ? ? ? ? ? ?鏡像有可能被覆蓋,進(jìn)而查詢失敗;oracle提示ora-01555錯誤。
?
? ?oracle為解決ora-01555問題:
? ? ?從10g 開始,oracle 對undo_retention 參數(shù)進(jìn)行了調(diào)整。默認(rèn)情況下,這個參數(shù)是啟用的。oracle自動調(diào)整回滾段數(shù)據(jù)保留時間;
? 當(dāng)然,如果undo表空間不足,系統(tǒng)自動滿足長時間的查詢,而不需要手動調(diào)整。
? ? ?同時,oracle還對undo表空間增加了guaratee控制,即用戶可以指定undo表空間必須滿足undo_retention 限制。
? ? ?>alter tablespace undotbs1 ? ?retention guaratee;
??
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
