溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

怎么避免數(shù)據(jù)庫(kù)ORA-01555錯(cuò)誤

發(fā)布時(shí)間:2021-11-09 15:59:29 來(lái)源:億速云 閱讀:166 作者:iii 欄目:關(guān)系型數(shù)據(jù)庫(kù)

本篇內(nèi)容介紹了“怎么避免數(shù)據(jù)庫(kù)ORA-01555錯(cuò)誤”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

1、回滾段數(shù)據(jù)被覆蓋

        原因:

        當(dāng)進(jìn)行DML操作時(shí),undo段會(huì)記錄數(shù)據(jù)變更前的狀態(tài)(通過(guò)構(gòu)造原數(shù)據(jù)的一致性數(shù)據(jù)塊)。如果用戶還沒(méi)有進(jìn)行commit操作,其他人查詢此條數(shù)據(jù)會(huì)看到數(shù)據(jù)變更前的狀態(tài)。因?yàn)槠渌脩糇x到的數(shù)據(jù)是undo段中原數(shù)據(jù)塊中的數(shù)據(jù),保證沒(méi)有commit的數(shù)據(jù)讀取的一致性。    

       會(huì)話A在9:50分的時(shí)候?qū)表發(fā)起了一次查詢,需要10分鐘完成查詢結(jié)果打印。會(huì)話B在9:51分對(duì)T表進(jìn)行了一次update,并且commit。此時(shí)undo段會(huì)記錄會(huì)話B在update的反向操作,假設(shè)名為undo1。會(huì)話C在9:52分對(duì)T表進(jìn)行了一次insert,并且同樣commit。此時(shí)undo段會(huì)記錄insert反向操作,假設(shè)名為undo2。會(huì)話A的查詢?cè)诎l(fā)起時(shí)已經(jīng)記錄數(shù)據(jù)庫(kù)當(dāng)前的SCN號(hào),假設(shè)此時(shí)SCN號(hào)為950。由于ILT事務(wù)槽記錄最新的SCN號(hào),所以再與數(shù)據(jù)塊頭部ILT事務(wù)槽中的SCN號(hào)進(jìn)行比對(duì)時(shí)發(fā)現(xiàn)當(dāng)前SCN大于950,所以需要對(duì)undo段進(jìn)行查詢。查詢到undo2段信息進(jìn)行比對(duì)發(fā)現(xiàn)SCN大于950,通過(guò)undo中記錄的事務(wù)信息在進(jìn)行前一個(gè)數(shù)據(jù)變更查找,此時(shí)undo1的SCN還是大于950,再繼續(xù)查找前面的undo信息,發(fā)現(xiàn)undo0的SCN號(hào)比950要早,此時(shí)會(huì)將undo0記錄的數(shù)據(jù)的信息+未變更的數(shù)據(jù)塊信息打印給用戶。由于undo段是通過(guò)覆蓋的方式進(jìn)行記錄的,如果時(shí)間過(guò)長(zhǎng)或頻繁進(jìn)行DML操作。那么在尋找過(guò)程中可能會(huì)出現(xiàn)沒(méi)有小于SCN號(hào)950的undo段,會(huì)返回一個(gè)經(jīng)典錯(cuò)誤ORA-1555 snapshoot too old(快照過(guò)舊),這樣是為了避免幻影讀、臟讀等現(xiàn)象,保證讀一致性的絕對(duì)特性。

        簡(jiǎn)單講,就是SQL語(yǔ)句執(zhí)行時(shí)間太長(zhǎng)、UNDO表空間過(guò)小、事務(wù)量過(guò)大,提交過(guò)于頻繁,導(dǎo)致執(zhí)行SQL過(guò)程中進(jìn)行一致性讀時(shí),修改的原數(shù)據(jù)(UNDO數(shù)據(jù))在UNDO表空間中已經(jīng)被覆蓋,不能構(gòu)造一致性讀塊。

        規(guī)避:

        1、加大回滾段的容量

         2、將undo_retention參數(shù)內(nèi)的提交后保留時(shí)間設(shè)置更大一些

2、塊延遲清除

        如果當(dāng)一個(gè)查詢觸發(fā)延遲塊清除的時(shí)候,ORACLE需要去查詢回滾段獲得該事務(wù)提交的SCN,如果事務(wù)前鏡像信息已經(jīng)被覆蓋,并且查詢的SCN小于回滾段記錄中記錄的最小提交SCN信息,那么oracle將無(wú)法判斷查詢的scn和事物提交scn的大小.則將commit 標(biāo)記為 回滾段中所能找到的最小 scn(對(duì)于查詢安全)。

        如果最近一次變更與查詢間隔時(shí)間過(guò)長(zhǎng)、間隔中進(jìn)行過(guò)大量事務(wù)變更或頻繁進(jìn)行事務(wù)提交,造成undo段中的數(shù)據(jù)已經(jīng)被覆蓋,無(wú)法判斷數(shù)據(jù)的變更情況和提交時(shí)間。此時(shí)oracle會(huì)查將該數(shù)據(jù)塊中ITL事務(wù)信息清除并將commit SCN變更為回滾段中最老的事務(wù),即最小的SCN號(hào)。以便保證數(shù)據(jù)能夠查詢,此時(shí)會(huì)報(bào)ORA-1555錯(cuò)誤。

“怎么避免數(shù)據(jù)庫(kù)ORA-01555錯(cuò)誤”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI