Oracle hataları

ORA-01000: maximum open cursors exceeded

Azami açık cursor sayısı aşıldı

ORA-01000: maximum open cursors exceeded

Bir oturumda OPEN_CURSORS’ın izin verdiğinden fazla açık cursor var. Bu genelde bir sızıntıdır: uygulama statement ve result set’lerini kapatmıyordur. Önce sızıntıyı giderin; sınırı artırmak hatayı yalnızca geciktirir.

ORA-01000 ne demek?

OPEN_CURSORS, tek bir oturumun aynı anda kaç cursor açık tutabileceğini sınırlar. Bu sınır veritabanı toplamı için değil, oturum başınadır. Uygulama bir döngüde statement açıp hiç kapatmıyorsa sayı büyür ve ORA-01000, çoğu zaman uygulama başladıktan saatler sonra ortaya çıkar.

ORA-01000 neden olur?

ORA-01000 nasıl çözülür?

  1. Cursor’ları hangi oturumun ve hangi SQL’in tuttuğunu görün: V$OPEN_CURSOR.
  2. Statement ve result set’leri finally bloğunda ya da try-with-resources ile kapatın.
  3. PL/SQL’de açık ve ref cursor’ları, exception bloğu dahil, kapatın.
  4. OPEN_CURSORS’ı yalnızca sayı büyümeden yüksek bir seviyede sabit kalıyorsa artırın.

ORA-01000 örneği

En çok cursor’u hangi oturumlar, hangi SQL için tutuyor?

SELECT sid, sql_text, COUNT(*) AS cursor_sayisi
  FROM v$open_cursor
 GROUP BY sid, sql_text
 ORDER BY cursor_sayisi DESC
 FETCH FIRST 20 ROWS ONLY;

Yalnızca yük gerçekse:

ALTER SYSTEM SET open_cursors = 1000 SCOPE = BOTH;

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-00020ORA-04031ORA-03113 Tüm Oracle hataları →

Oracle dokümantasyonu: ORA-01000. Oracle, Oracle Corporation’ın tescilli ticari markasıdır. SQLlightspeed’in Oracle ile bir bağlantısı yoktur.