Oracle ORA-01555(快照過舊)

來源:互聯網
上載者:User

Oracle ORA-01555(快照過舊)

一、引言:

[Oracle@www.bkjia.com]$ oerr ora 01555
01555, 00000, "snapshot too old: rollback segment number %s with name \"%s\" too small"
// *Cause: rollback records needed by a reader for consistent read are
//      overwritten by other writers
// *Action: If in Automatic Undo Management mode, increase undo_retention
//          setting. Otherwise, use larger rollback segments

    ORA-01555 快照過舊,是資料庫中很常見的一個錯誤,比如當我們的事務需要使用undo來構建CR塊的時候,而此時對應的undo已經不存在了,這個時候就會報ORA-01555的錯誤。

    ORA-01555錯誤在Oracle 8i及之前的版本最多。從9i開始的undo自動管理,至現在的10g、11g中的undo auto tuning,使得ORA-01555的錯誤越來越少。但是這個錯誤,仍然不可避免。

二、出現ORA-01555錯誤,通常有2中情況:

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

    (2)、SQL語句執行過程中,訪問到的塊,在進行延遲塊清除時,不能確定該塊的事務提交時間與SQL執行開始時間的先後次序。這種情況很少。

三、類比ORA-01555情境:

SQL> create table jack (id int,name varchar2(10));

Table created.

SQL> insert into jack values(1,'a');

1 row created.

SQL> insert into jack values(2,'b');

1 row created.

SQL> commit;

Commit complete.

SQL> show parameter undo

NAME                    TYPE      VALUE
-------------------- ----------- --------------
undo_management          string      AUTO
undo_retention          integer    900
undo_tablespace          string      UNDO2
SQL> create undo tablespace undo1 datafile '/u01/app/oracle/oradata/yft/undo01.dbf' size 1m;

Tablespace created.

SQL> alter system set undo_retention=1;

System altered.

SQL> var x refcursor
SQL> begin
  2  open :x for select * from jack;
  3  end;
  4  /

PL/SQL procedure successfully completed.

SQL> begin
  2    for i in 1 .. 20000 loop
  3  update jack set id=id+1;
  4  commit;
  5  end loop;
  6  end;
  7  /

PL/SQL procedure successfully completed.

SQL> print :x
ERROR:
ORA-01555: snapshot too old: rollback segment number 17 with name
"_SYSSMU17_2039231318$" too small

 

no rows selected

四、第1種情況解決的辦法:

(1)、增加UNDO資料表空間大小;

(2)、增加undo_retention時間,預設只有15分鐘;

(3)、最佳化出錯的SQL,減少查詢的時間,首選方法;

(4)、避免頻繁的提交。

Oracle ORA-01555 快照過舊 說明 

ORA-01078 和 LRM-00109 報錯解決方案

ORA-01555超長的Query Duration時間 

ORA-00471 處理方法筆記

ORA-00314,redolog 損壞,或丟失處理方法

ORA-00257 歸檔日誌過大導致無法儲存的解決辦法

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.