Forum
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.
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.
Selam,
UNDO_SIZE => 459775.96875 UNDO_RETENTION => 7200 OPTIMUM_UNDO_RETENTION => 38144
Buaradaki, undo_retention yükseltilmiş halidir.
Selam;
Sistemde çalıştır.
SQL> ALTER SYSTEM SET UNDO_RETENTION = 38144;
Teşekkürler...
Selam;
Çok Teşekkür ederim Koray Bey...