天天看點

oracle 復原段快照過舊,案例:Oracle資料庫無法啟動報錯ORA-01555 解決快照過舊辦法彙總...

天萃荷淨

在資料庫open過程中常遇到ORA-01555彙總

在資料庫open的過程中,select ctime, mtime, stime from obj$ where obj# = :1語句報ORA-01555錯誤,資料庫無法正常open

一般情況下會報某個復原段,但是這裡ORA-01555: snapshot too old: rollback segment number 0 with name “SYSTEM” too small這裡直接報了system(系統復原段),屬于少見情況

Fri Jun 26 11:47:31 2015

SMON: enabling cache recovery

Fri Jun 26 11:47:31 2015

ORA-01555 caused by SQL statement below (SQL ID: 4krwuz0ctqxdt, SCN: 0x0b41.37629378):

Fri Jun 26 11:47:31 2015

select ctime, mtime, stime from obj$ where obj# = :1

Fri Jun 26 11:47:31 2015

Errors in file /orabin/admin/doocrm/udump/doocrm_ora_5046722.trc:

ORA-00704: bootstrap process failure

ORA-00704: bootstrap process failure

ORA-00604: error occurred at recursive SQL level 1

ORA-01555: snapshot too old: rollback segment number 0 with name "SYSTEM" too small

Error 704 happened during db open, shutting down database

USER: terminating instance due to error 704

Instance terminated by USER, pid = 5046722

ORA-1092 signalled during: alter database open resetlogs...

在資料庫open的過程中,select increment$,minvalue,maxvalue,cycle#,order$,cache,highwater,audit$,flags from seq$ where obj#=:1語句上報ORA-01555,導緻資料庫open失敗

oracle 復原段快照過舊,案例:Oracle資料庫無法啟動報錯ORA-01555 解決快照過舊辦法彙總...

在資料庫open過程中,select name,file#,block#,status$,user#,undosqn,xactsqn,scnbas,scnwrp,DECODE(inst#,0,NULL,inst#),ts#,spare1 from undo$ where us#=:1語句導緻資料庫open失敗.

ARC0: Becoming the 'no SRL' ARCH

Sun Jun 28 16:08:22 2015

ARC1: Becoming the heartbeat ARCH

Sun Jun 28 16:08:22 2015

SMON: enabling cache recovery

Sun Jun 28 16:08:22 2015

ORA-01555 caused by SQL statement below (SQL ID: 7bd391hat42zk, Query Duration=0 sec, SCN: 0x0d27.0a1ce29d):

Sun Jun 28 16:08:22 2015

select name,file#,block#,status$,user#,undosqn,xactsqn,scnbas,scnwrp,DECODE(inst#,0,NULL,inst#),ts#,spare1 from undo$ where us#=:1

Sun Jun 28 16:08:22 2015

Errors in file /oracle/app/oracle/admin/ibsscrm/udump/xxxx_ora_30212428.trc:

ORA-00604: error occurred at recursive SQL level 1

ORA-01555: snapshot too old: rollback segment number 0 with name "SYSTEM" too small

Error 604 happened during db open, shutting down database

USER: terminating instance due to error 604

Instance terminated by USER, pid = 30212428

ORA-1092 signalled during: alter database open...

出現這類問題,一般是由于obj$,seq$,undo$等基表上對象scn大于資料庫目前scn或者是由于這些表上有事務未送出,出現上述兩種情況,資料庫需要找對應的undo的復原段中記錄,而此時對應的復原段異常(或者是由于redo未進行正常前滾,導緻上述對象或者復原段記錄不正常),進而出現類似情況,一般出現此類情況,可以通過10046定位到block,然後故障原因采用bbed修改scn或者bbed送出事務來解決此類問題.

1. 出現ORA-01555錯誤,通常有2種情況:

(1)SQL語句執行時間太長,或者UNDO表空間過小,或者事務量過大,或者過于頻繁的送出,導緻執行SQL過程中進行一緻性讀時,SQL執行後修改的前鏡像(即UNDO資料)在UNDO表空間中已經被覆寫,不能構造一緻性讀塊(CR blocks)。  這種情況最多。

(2)SQL語句執行過程中,通路到的塊,在進行延遲塊清除時,不能确定該塊的事務送出時間與SQL執行開始時間的先後次序。 這種情況很少。

2. 第1種情況解決的辦法:

(1)增加UNDO表空間大小

(2)增加undo_retention 時間,預設隻有15分鐘

(3)優化出錯的SQL,減少查詢的時間,首選方法

(4)避免頻繁的送出

-----------------溫馨提示--------------------

操作有風險,動手需謹慎

Oracle研究中心

http://www.oracleplus.net

本文由大師惜分飛原創分享,轉載請盡量保留本站網址

--------------------------------------ORACLE-DBA----------------------------------------

最權威、專業的Oracle案例資源彙總之案例:Oracle資料庫無法啟動報錯ORA-01555 解決快照過舊辦法彙總