ORA-01555: snapshot too old: rollback segment number N with name "_SYSSMU…$" too small
Uzun süren bir sorgu, okuma tutarlılığını koruyabilmek için bazı verilerin eski hâline ihtiyaç duydu; ama o undo çoktan üzerine yazılmıştı. Sorguyu hızlandırın, undo’yu daha uzun tutun (UNDO_RETENTION ve yeterince büyük bir undo tablespace) ve açık bir cursor üzerinde dönen döngünün içinde commit etmeyin.
Ne anlama gelir?
Oracle her sorguya, verinin sorgunun başladığı andaki tutarlı bir görüntüsünü verir. Sorgu sürerken satırlar değişirse Oracle eski hâllerini undo’dan yeniden kurar. Sorgu, undo’nun saklandığı süreden uzun sürerse — ya da undo alanı küçük olduğu için yeniden kullanılırsa — eski hâl kaybolur ve sorgu, bazen saatlerce çalıştıktan sonra, ORA-01555 ile düşer.
Yaygın nedenler
UNDO_RETENTION’dan uzun süren bir sorgu ya da rapor.- Mevcut değişiklik hızında undo’yu o kadar uzun tutamayacak kadar küçük bir undo tablespace.
- Commit üzerinden fetch: her döngüde commit eden, açık bir cursor üzerindeki döngü.
- Uzun sorgunun okuduğu tablolarda yoğun eşzamanlı DML.
Nasıl çözülür?
- Önce uzun sorguyu iyileştirin — ne kadar kısa sürerse o kadar az undo gerekir.
V$UNDOSTAT’a (MAXQUERYLEN,TUNED_UNDORETENTION) bakın veUNDO_RETENTION’ı en uzun sorgunuzun üzerine çıkarın.- Undo tablespace’in o kadar undo’yu tutabildiğinden emin olun (daha büyük datafile’lar ya da autoextend).
- Cursor döngüsünün içinde commit etmeyin; sonda bir kez commit edin ya da bağımsız parçalar halinde işleyin.
- Kritik işler için bir DBA undo tablespace’e
RETENTION GUARANTEEkoyabilir — bu durumda DML’lerin hata verme riski vardır.
Örnek
Sorgular ne kadar sürüyor, undo ne kadar tutuluyor?
SELECT MAX(maxquerylen) AS en_uzun_sorgu_sn,
MAX(tuned_undoretention) AS ayarlanan_saklama_sn
FROM v$undostat;
SHOW PARAMETER undo_retention
SQLlightspeed’de
Bir ifade hata verdiğinde SQLlightspeed’in hata paneli, hata kodunu sade bir Türkçe açıklama ve ne yapmanız gerektiğine dair bir öneriyle; Oracle’ın kendi mesajı ve Oracle dokümantasyonuna bağlantıyla birlikte gösterir — bu hata ve sık görülen onlarca başka hata için.
İlgili hatalar
ORA-00060ORA-00054ORA-01403 Tüm Oracle hataları →
Oracle dokümantasyonu: ORA-01555. Oracle, Oracle Corporation’ın tescilli ticari markasıdır. SQLlightspeed’in Oracle ile bir bağlantısı yoktur.