Oracle

ORA-01555: 名稱為 ’’ 的快照太舊回滾段太小錯誤

  • September 4, 2016

我創建了一個適用於兩個欄位的觸發器,第一個欄位(blob)和第二個欄位(varchar2)。當第二個欄位發生一些更改時,此觸發器會從另一個表的 blob 值更新 blob。嘗試更新表格行時。它會產生一個錯誤:

ORA-01555; 名稱為“”的快照工具舊回滾段太小

我創建了一個新的回滾段,但它無法解決錯誤。我該如何解決這個問題

這是我的觸發器:

create or replace trigger mytrigger
before update on frarea
for each row
declare 
v_blob blob;

BEGIN
SELECT VALUE INTO v_blob
from domain_units_backup
where id= :new.category;


:new.echeloncustom := v_blob;

exception

when no_data_found
dbms_output.put_line('no data found');

end;

01555, 00000, “快照太舊: 回滾段號 %s 的名稱"%s" 太小”

**原因:**讀取器為一致讀取所需的回滾記錄被其他寫入器覆蓋 **操作:**如果處於自動撤消管理模式,請增加 undo_retention 設置。否則,使用更大的回滾段

在 Oracle 數據庫中更新記錄時,應保留舊記錄以用於一致的讀取目的。保存的時間段可以通過undo_retention啟用自動撤消管理的數據庫中的參數來控制。如果撤消保留時間太短,那麼撤消記錄將被其他會話覆蓋。

Oracle 11g 以後,Oracle 建議使用自動撤消管理。

從 Release 11g 開始,自動撤消管理是新安裝數據庫的預設模式。更多的

您可以更改撤消保留初始化參數作為後續

  • 以 sysdba 身份登錄。範例:在 Linux 中使用 SQLPLUS $ sqlplus sys as sysdba,.
  • 然後使用ALTER SYSTEM命令作為SQL>alter system set undo_retention=1800 Undo_retention 以秒為單位指定時間。在擴展撤消保留之前,請確保您的撤消表空間是可自動擴展的並且有足夠的儲存空間來擴展。

引用自:https://dba.stackexchange.com/questions/146592