Forum

ORA-01555 Hatası ve...
 
Bildirimler
Hepsini Temizle

ORA-01555 Hatası ve Çözümü

5 Yazılar
2 Üyeler
0 Likes
6,881 Görüntüleme
(@Alparslanturkmeno)
Gönderiler: 30
Eminent Member
Konu başlatıcı
 

Merhabalar,

Analizleri olmayan partitionların schedule_job ile analizleri gece çalışması şekilde analiz yapmaya çalıştığım zaman aşağıdaki hatayı alıyorum. Nette araştırdım undo retention artırılması gibi bir takım işlemler yaptım. Fakat, yinede aynı hatayı alıyorum. Başka çözüm yolu olarak aşağıda bir çözüm yolu yazılmış fakat tablo boyutları çok büyük aşağıdaki değişikliği yapsam çalışan sistem ne kadar etkilenir? Bunu bilmediğimden i aşağıdaki retentipn guarantee işlemini yapmadım. Şimdiden teşekkür ederim.. 

ORA-01555:Snapshot too old rollback segment number ... with name "_......" too small 

Önerilen başka bir çözüm yolu: 

Eğer UNDO_RETENTION değerlein arttırılmasına rağmen yine de aynı hatayı alıyorsanız aşağıdaki RETENTION GUARANTEE seçenekli undo tablespace
oluşturmanız gerekiyor.

CREATE UNDO TABLEAPCE undo_tbs
DATAFIEL ‘/u02/oradata/grid/undo_tbs01.dbf’ SIZE 1 G
RETENTION GUARANTEE;

Yukarıdaki sebeplerin dışındada daha bir sürü etken nedeniyle de bu sorun ortaya çıkmaktadır.
Bunlar;
*DML yük seviyesi sistemde alt seviyelerde bulunurken çok uzun sürede çalışan sorguların re-schedule edilmiş olması
*Rollback segment (undo) size değerinin arttırlması
*Yapılan commitler arasında fetch yapmayınız.

 
Gönderildi : 11/11/2014 13:30

(@h-koraygunduz)
Gönderiler: 301
Üye
 

Selam;


Undo Table Space boyutun ne kadar ? Bunu büyütmek sistemi etkilemez. Hatta tablo boyutların büyük ise max file boyutuna dayayabilirsin. Mevcut Undo Tablespace boyutunu max olarak büyütüp deneyebilirsin. Tabi senin problemin undo retention değeri bunun kaç olması gerektiğini hesaplamak gerekir.


Aşağıdaki komutun çıktısı değer olarak kaç veriyor ?


SELECT d.undo_size/(1024*1024) as UNDO_SIZE,
       SUBSTR(e.value,1,25) as UNDO_RETENTION,
       ROUND((d.undo_size / (to_number(f.value) *
       g.undo_block_per_sec))) as OPTIMUM_UNDO_RETENTION
  FROM (
       SELECT SUM(a.bytes) undo_size
          FROM v$datafile a,
               v$tablespace b,
               dba_tablespaces c
         WHERE c.contents = 'UNDO'
           AND c.status = 'ONLINE'
           AND b.name = c.tablespace_name
           AND a.ts# = b.ts#
       ) d,
       v$parameter e,
       v$parameter f,
       (
       SELECT MAX(undoblks/((end_time-begin_time)*3600*24))
              undo_block_per_sec
         FROM v$undostat
       ) g
WHERE e.name = 'undo_retention'
  AND f.name = 'db_block_size';


Teşekkürler.


 

 
Gönderildi : 11/11/2014 15:33

(@Alparslanturkmeno)
Gönderiler: 30
Eminent Member
Konu başlatıcı
 

Selam,

UNDO_SIZE => 459775.96875 UNDO_RETENTION =>  7200 OPTIMUM_UNDO_RETENTION => 38144 

Buaradaki, undo_retention yükseltilmiş halidir. 

 
Gönderildi : 11/11/2014 17:19

(@h-koraygunduz)
Gönderiler: 301
Üye
 

Selam;


Sistemde çalıştır.


SQL> ALTER SYSTEM SET UNDO_RETENTION = 38144;


Teşekkürler...

 
Gönderildi : 11/11/2014 17:28

(@Alparslanturkmeno)
Gönderiler: 30
Eminent Member
Konu başlatıcı
 

Selam;

Çok Teşekkür ederim Koray Bey... 

 
Gönderildi : 11/11/2014 17:57

Paylaş: