Oracle hataları

ORA-01555: snapshot too old

Snapshot too old — gereken undo artık yok

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

Nasıl çözülür?

  1. Önce uzun sorguyu iyileştirin — ne kadar kısa sürerse o kadar az undo gerekir.
  2. V$UNDOSTAT’a (MAXQUERYLEN, TUNED_UNDORETENTION) bakın ve UNDO_RETENTION’ı en uzun sorgunuzun üzerine çıkarın.
  3. Undo tablespace’in o kadar undo’yu tutabildiğinden emin olun (daha büyük datafile’lar ya da autoextend).
  4. 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.
  5. Kritik işler için bir DBA undo tablespace’e RETENTION GUARANTEE koyabilir — 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.