Oracle ORA 01555 快照過舊

2021-09-07 21:55:27 字數 2769 閱讀 4488

一、引言:

[

oracle@yft yft

]$ 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

inautomatic 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場景:

1 sql>

create

table jack (id int,name varchar2(10

));2

3table

created.

45 sql>

insert

into jack values(1,'a'

);671

row created.

89 sql>

insert

into jack values(2,'b'

);10111

row created.

1213 sql>

commit;14

15commit

complete.

1617 sql>

show parameter undo

1819

name type value

20--

------------------ ----------- --------------

21undo_management string auto

22 undo_retention integer90023

undo_tablespace string undo2

24 sql>

create undo tablespace undo1 datafile '

'size 1m;

2526

tablespace created.

2728 sql>

alter system set undo_retention=1;

2930

system altered.

3132 sql>

varx refcursor

33 sql>

begin342

open :x for

select

*from

jack;353

end;364

/3738 pl/sql procedure

successfully completed.

3940 sql>

begin412

for i in

1 .. 20000

loop423

update jack set id=id+1;

434commit;44

5end

loop;456

end;467

/4748 pl/sql procedure

successfully completed.

4950 sql>

print

:x51

error:

52 ora-

01555: snapshot too old: rollback segment number

17with

name

53"_syssmu17_2039231318$" too small

5455

5657 no rows selected

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

(1)、增加undo表空間大小;

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

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

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

關於Oracle ORA 01555快照過舊的錯誤

關於oracle ora 01555快照過舊的錯誤 首先了解oracle在什麼情況下會產生ora 01555錯誤 1 在1點鐘,使用者a發出了select from testdb 此時不管將來testdb怎麼變化,正確的結果應該是使用者a會看到在1點鐘這個時刻的內容。2 在1點30分,使用者b執行了...

Error ORA 01555 快照過舊

錯誤資訊 error ora 01555 快照過舊 回退段號47 名稱為 syssmu47 1286521707 過小 可能原因 sql語句執行時間太長,或者undo表空間過小,或者事務量過大,或者過於頻繁的提交,導致執行sql過程中進行一致性讀時,sql執行後修改的前映象 即undo資料 在und...

原創 ORA 01555 快照過舊

問題描述 在執行下面語句時曝出了標題所示的錯誤ora 01555。insert into super.sb kpxx com select from super.sb kpxx a where kprq to date 20130101 yyyymmdd and kprq to date 20131...