♣ 程序員
題目 部分面試
在Oracle中,什麼是ORA-01555錯誤?數據庫
♣ 安全
答案部分
微信
在告警日誌中記錄的ORA-01555(snapshot too old,快照過舊)報錯信息相似:網絡
1ORA-01555: snapshot too old: rollback segment number 107 with name "_SYSSMU107_1253191395$" too small
默認狀況,ORA-01555錯誤發生時不會自動生成跟蹤日誌文件,可是能夠在系統裏設置下面的事件,讓它在錯誤發生時同時生成跟蹤日誌文件:ide
1alter system set events '1555 trace name errorstack level 3';
因爲回滾段是循環使用的,當事務提交之後,該事務佔用的回滾段事務會被標記爲非活動,此時的回滾段空間能夠被覆蓋重用。那麼問題就出現了,若是一個查詢須要使用被覆蓋的回滾段構造前鏡像(Before Image)實現一致性讀,那麼此時就會出現Oracle著名的ORA-01555(snapshot too old,快照過舊)錯誤。須要注意的是,ORA-01555錯誤是一個安全的錯誤,它不會形成數據丟失或者損壞,只是會讓收到該錯誤的查詢沒法繼續。學習
ORA-01555錯誤的另一個緣由是延遲塊清除(Delayed Block Clean out)。當一個查詢觸發延遲塊清除時,Oracle須要去查詢回滾段得到該事務的提交SCN。若是事務的前鏡像(Before Image)信息已經被覆蓋,而且查詢SCN也小於回滾段中記錄的最小提交SCN,那麼Oracle將無從判斷查詢SCN和事務提交SCN的大小,此時出現延遲塊清除會致使ORA-01555錯誤。優化
還有一種致使ORA-01555錯誤的狀況出如今使用SQL*Loader直接方式加載(direct=true)數據時,因爲不產生Redo和Undo信息,Oracle直接指定CACHED COMMIT SCN進行加載數據,在訪問這些數據時,有時會產生ORA-01555錯誤。url
知道了ORA-01555錯誤產生的緣由就能夠總結出如下方法來解決ORA-01555錯誤問題:
(1)擴大回滾段
由於回滾段是循環使用的,若是回滾段足夠大,那麼那些被提交的數據信息就能保存足夠長的時間,而那些大事務就能夠完成一致性讀取。
(2)增長UNDO_RETENTION時間
在UNDO_RETENTION規定的時間內,任何其它事務都不能覆蓋這些數據。
(3)優化相關查詢語句,減小一致性讀
減小查詢語句的一致性讀,也能夠下降讀取不到回滾段數據的風險。
(4)減小沒必要要的事務提交
提交的事務越少,產生的回滾段信息就越少。
(5)對大事務指定回滾段
經過如下語句能夠指定事務的回滾段:
1SET TRANSACTION USE ROLLBACK SEGMENT rollback_segment;
給大事務指定回滾段,即下降大事務回滾信息覆蓋其它事務的回滾信息的概率,又下降了它自身的回滾信息被覆蓋的概率。大事務的存在,每每是ORA-01555錯誤產生的誘因。
(6)使用遊標時儘可能使用顯式遊標,而且只在須要的時候打開遊標,同時將全部能夠在遊標外作的操做從遊標循環中拿出。當遊標打開時,查詢就開始了,直到遊標關閉。減小遊標的打開時間,就減小了ORA-01555錯誤發生的概率。
(7)使用回滾表空間自動管理
回滾表空間自動管理是Oracle 9i後的特性,Oracle自動管理回滾段的建立和回收,而且Oracle 10g中,這一特性大大加強了,而在大型的數據倉庫或者報表系統中,會有一些很大的查詢做業存在,這時能夠考慮使用手動管理,爲某些大做業建立單獨的回滾段。
& 說明:
有關Undo和ORA-01555錯誤的更多內容能夠參考個人BLOG:http://blog.itpub.net/26736162/viewspace-2080746/
有關閃回技術的更多內容能夠參考個人BLOG:http://blog.itpub.net/26736162/viewspace-2136497/
本文選自《Oracle程序員面試筆試寶典》,做者:小麥苗
詳細內容能夠添加麥老師微信或QQ私聊。
About Me:小麥苗
● 本文做者:小麥苗,只專一於數據庫的技術,更注重技術的運用
● 做者博客地址:http://blog.itpub.net/26736162/abstract/1/
● 本系列題目來源於做者的學習筆記,部分整理自網絡,如有侵權或不當之處還請諒解
● 版權全部,歡迎分享本文,轉載請保留出處
● QQ:646634621 QQ羣:618766405
● 提供OCP、OCM和高可用部分最實用的技能培訓
● 題目解答如有不當之處,還望各位朋友批評指正,共同進步
長按下圖識別二維碼或微信掃描下圖二維碼來關注小麥苗的微信公衆號:xiaomaimiaolhr,學習最實用的數據庫技術。