UNDO長時間回滾不釋放怎么辦

這篇文章給大家介紹UNDO長時間回滾不釋放怎么辦,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

目前成都創(chuàng)新互聯(lián)已為上1000+的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)絡(luò)空間、網(wǎng)站改版維護(hù)、企業(yè)網(wǎng)站設(shè)計(jì)、高昌網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

數(shù)據(jù)庫環(huán)境:

數(shù)據(jù)庫版本:11.1.0.7.6    

操作系統(tǒng):HPUX IA64 B.11.31      

數(shù)據(jù)庫運(yùn)行模式:RAC,4節(jié)點(diǎn)          

UNDO表空間大小:每個節(jié)點(diǎn)200G         

系統(tǒng)類型:OLAP


    凌晨3點(diǎn)多,接到客戶電話,說是昨天晚上數(shù)據(jù)庫殺了一個會話(會話已經(jīng)報(bào)錯),然后這個會話產(chǎn)生的UNDO數(shù)據(jù)一直在回滾,從晚上九點(diǎn)開始,占用大量UNDO表空間,新的會話上去執(zhí)行SQL的時候會報(bào)無法分配UNDO表空間的錯誤。

    我們知道,諸如Insert,Delete,Update等操作都會在UNDO表空間其中的一個回滾段里面分配相應(yīng)的空間以便生成UNDO回滾信息。當(dāng)我們Rollback或者使用版本查詢、閃回表的時候都要用到UNDO信息,這里就有一個矛盾,如果UNDO信息保存的時間越長,那么這些特性被支持的力度也就越大,這個是我們很愿意看到的,但是凡事都有兩面性,在支持這些特性的同時,也會有相應(yīng)的消耗,而且如果保持太長時間的信息的話,成本將成倍的增加。

    這也就是我們要知道一個合適的平衡點(diǎn)兒,既可以最大限度的滿足我們對這些特性的需求,同時也減少存儲的需求。

    另外一方面,如果這個時間設(shè)置的過小,那么當(dāng)我們的一個比較長的SQL執(zhí)行時間超過這個參數(shù)的時候,我們就會獲得一個ORA-01555快照過舊的錯誤,更何況我們的系統(tǒng)是一個OLAP系統(tǒng)。

    其實(shí)最好的辦法是新建一個UNDO表空間,然后將新的UNDO表空間指定到當(dāng)前實(shí)例上,讓老的UNDO表空間慢慢回滾,或者在原來的UNDO表空間里面增加數(shù)據(jù)文件。

    但是這兩種方法都需要新的存儲空間支持。并且第二種在新增到原有UNDO表空間中以后想要縮小UNDO就很困難了。

    對于UNDO表空間,好像Oracle并不想提供太多的管理手段給DBA,也行這也是為了保證數(shù)據(jù)的完整性,而做出的妥協(xié)吧。

    在現(xiàn)場,我們試了將參數(shù) UNDO_retention從原來的20800縮小到8000

SQL> alter system set UNDO_RETENTION=8000 sid='dw2' scope=both;

    但是經(jīng)過觀察,效果并不明顯,后來知道從Oracle 10g開始,有一個_undo_autotune的參數(shù),根據(jù)undo表空間使用情況自動控制undo_retention的值,也就是在UNDO表空間自動擴(kuò)展的時候,保證undo_retention設(shè)置的值為最低閥值,然后根據(jù)需要擴(kuò)展UNDO表空間,如果UNDO表空間AutoExtend為OFF,那么就根據(jù)UNDO STATUS的信息來動態(tài)的設(shè)置undo_retention的值,那么問題就來了,我們系統(tǒng)中_undo_autotune的值是TURE,也就是說undo_retention的值是由系統(tǒng)來決定的,我們所做的修改根本就沒有作用。

   根據(jù)查詢系統(tǒng)的視圖得知,該回滾大概有220萬個blocks需要回滾,每小時大概20萬個,也就是說需要11到12個小時才能回滾完。

   在不增加UNDO表空間或者不切換UNDO表空間的前提下,自動管理UNDO的模式下,實(shí)在是沒有什么好辦法可以做到在快速釋放UNDO空間(Oracle要保證回滾完成,以保證數(shù)據(jù)完整性,如果會話在則有會話進(jìn)程來完成回滾,否則由SMON進(jìn)程來完成)

我們做到只能是等待回滾完成,及時關(guān)閉節(jié)點(diǎn),在重啟以后數(shù)據(jù)庫依然要完成回滾才可以的。如果大家有什么好辦法,歡迎一起來討論

我的建議是修改_undo_autotune參數(shù)為False,然后可以適當(dāng)?shù)目s小undo_retention的值,如果達(dá)不到預(yù)期的話,可以通過新建UNDO表空間并且替換之的辦法來解決問題.

SQL> create undo tablespace UNDO005 datafile '.......' size 20G autoextend off;

SQL> alter system set undo_tablespace=UNDO005;

等待到回滾完成以后再切換回來原來的UNDO表空間.

SQL> alter system set undo_tablespace=UNDO002;

建議:這種類型的大型數(shù)據(jù)庫,因?yàn)槊總€SQL執(zhí)行時間都比較長,數(shù)據(jù)量比較大,有些一個語句都會參數(shù)幾十個G的UNDO數(shù)據(jù),所以建議在回滾開始的時候,切換一個備用的UNDO表空間,讓其慢慢的回滾,待回滾完畢之后,再切換回來,當(dāng)然,如果回滾段比較大,不影響使用的情況下也可以讓之慢慢回滾。

關(guān)于UNDO長時間回滾不釋放怎么辦就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

分享題目:UNDO長時間回滾不釋放怎么辦
分享路徑:http://muchs.cn/article12/ijoodc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)、營銷型網(wǎng)站建設(shè)、網(wǎng)站內(nèi)鏈、定制網(wǎng)站、企業(yè)建站、品牌網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

營銷型網(wǎng)站建設(shè)