Data Pump Export işleminin ORA-31693 ORA-02354 ve ORA-01555 hataları ile sonlanması

Expdp ile yedek alınırken lob alanı olan bir tabloya geldiğinde ORA-31693 ORA-02354 ve ORA-01555 hataları ile sonlanabilmektedir. Bunun iki temel sebebi bulunmaktadır.

  • İlgili tablodaki LOB alanında corruption olabilir.
  • İlgili tablonun LOB tetention değeri olması gereken gibi değildir.

Expdp işlemi aşağıdaki şekilde sonlanmaktadır.

ORA-31693: Table data object "KULLANICI"."TABLO" failed to load/unload and is being skipped due to error:
ORA-02354: error in exporting/importing data
ORA-01555: snapshot too old: rollback segment number 154 with name "_SYSSMU154_1434655980$" too small

1. durumda ilgili corruption’ın düzeltilmesi gerekmektedir. Sonrasında hatasız tamamlanacaktır.
2. durumda ise ilgili tablodaki lob alanının retention değeri ve sistemin undo_retention değeri yeteri kadar arttırılmalıdır.

Öncelikle mevcut durumdaki undo_retention değerini bulalım.

SQL> show parameter undo;

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_management string AUTO
undo_retention integer 900
undo_tablespace

En uzun süren sorgunun ne kadar sürdüğünü bulalım.

SQL> select max(maxquerylen) from v$undostat;

MAX(MAXQUERYLEN)
----------------
15429

Sorun yaratan tablonun lob retention değerini tespit edelim.

SQL> select retention from dba_lobs where owner='KULLANICI' and table_name='TABLO';

RETENTION
----------
900

Yukarıdaki örnekte en uzun süren sorgu 15429 saniye iken , tablonun lob retention değeri ve undo_retention 900 saniye (15 dakika) şeklindedir.

Bu durumda hem undo_retention arttırılmalı hemde tablonun lob retention değeri eşitlenmelidir.

Undo_retention değişikliği :

Undo retention değeri en uzun sorgunun çalıştığı süreden daha fazla verilmelidir. Ayrıca verilecek undo_retention değeri için yeteri kadar undo tablespace olduğundan emin olun.

SQL>ALTER SYSTEM SET UNDO_RETENTION = 15500 scope=both sid='*';

Tablonun lob retention değişikliği :

Bu değişiklik ile sistemin undo retention değeri ile tablonun lob retention değeri eşitlenmektedir.

SQL> alter table KULLANICI.TABLO modify lob(LOB_KOLON_ADI) (pctversion 5);
Table altered.

SQL> alter table KULLANICI.TABLO modify lob(LOB_KOLON_ADI) (retention);
Table altered.

Tablonun mevcut lob retention değerini sorguladığımızda undo_retention ile aynı olmalıdır.

SQL> select retention from dba_lobs where owner='KULLANICI' and table_name='TABLO';

RETENTION
----------
15500

Bu işlemler sonrasın export işlemi sorunsuz tamamlanacaktır.

Loading

Leave Your Comment