您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關oracle 11g rac ORA-01555快照過舊報錯的處理方法,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
ORA-01555 快照過舊,是數據庫中很常見的一個錯誤,比如當我們的事務需要使用undo來構建CR塊的時候,
而此時對應的undo 已經不存在了, 這個時候就會報ORA-01555的錯誤。
環境是Oracle 11g RAC 由于客戶執行一個比較復雜的SQL,使用PLSQL運行了88分鐘后出現報錯,這是一個要查看報表的SQL。
臨時的處理方法如下:
以下為虛擬機模擬操作,建議數據庫安裝的時候這個參數一定要提前調整優化一下,不要使用默認值。
[root@ysdb1 ~]# su - oracle [oracle@ysdb1 ~]$ sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.0 Production on Fri Dec 23 10:39:44 2016 Copyright (c) 1982, 2013, Oracle. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP, Data Mining and Real Application Testing options SYS@ysdb1>show parameter undo; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ undo_management string AUTO undo_retention integer 900 --默認15分鐘 undo_tablespace string UNDOTBS1 SYS@ysdb1> SYS@ysdb1>alter system set undo_retention=10800 scope=both; System altered.
--查看表空間容量
SYS@ysdb1>col tablespace_name for a15 SYS@ysdb1>col free_rate for a15 SYS@ysdb1>SELECT a.tablespace_name, ROUND (a.total_size) "total_size(MB)", ROUND (a.total_size) - ROUND (b.free_size, 3) "used_size(MB)", ROUND (b.free_size, 3) "free_size(MB)", ROUND (b.free_size / total_size * 100, 2) || '%' free_rate FROM ( SELECT tablespace_name, SUM (bytes) / 1024 / 1024 total_size FROM dba_data_files GROUP BY tablespace_name) a, ( SELECT tablespace_name, SUM (bytes) / 1024 / 1024 free_size FROM dba_free_space GROUP BY tablespace_name) b WHERE a.tablespace_name = b.tablespace_name(+); TABLESPACE_NAME total_size(MB) used_size(MB) free_size(MB) FREE_RATE --------------- -------------- ------------- ------------- --------------- SYSAUX 600 178.625 421.375 70.23% UNDOTBS1 200 56.062 143.938 71.97% USERS 5 1 4 80% SYSTEM 700 287.5 412.5 58.93% UNDOTBS2 200 6.687 193.313 96.66%
SYS@ysdb1> SELECT tablespace_name, status, SUM (bytes) / 1024 / 1024 "Bytes(M)" FROM dba_undo_extents GROUP BY tablespace_name, status; TABLESPACE_NAME STATUS Bytes(M) TABLESPACE_NAME STATUS Bytes(M) --------------- --------- ---------- UNDOTBS1 UNEXPIRED 11 UNDOTBS2 UNEXPIRED 2.125 UNDOTBS1 EXPIRED 44.0625 UNDOTBS2 EXPIRED 3.5625
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 11g rac ORA-01555快照過舊報錯的處理方法有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。