ORA-01000: Maximum open cursors exceeded
OracleNe demek?
Bir oturum, OPEN_CURSORS parametresiyle izin verilenden fazla cursor açtı. Yeni cursor açılamıyor.
Neden olur?
Uygulamanın açtığı Statement/ResultSet nesnelerini kapatmaması (cursor leak), OPEN_CURSORS değerinin iş yüküne göre düşük ayarlanması veya döngü içinde sürekli yeni hazır ifadeler (prepared statement) hazırlanıp kapatılmaması.
Nasıl çözülür?
Açık cursor'ları izleyin: SELECT * FROM v$open_cursor WHERE sid = ... ve oturum başına sayıyı v$sesstat üzerinden görün. Asıl çözüm uygulamada her Statement/ResultSet'i finally bloğunda kapatmaktır (cursor leak giderme). Geçici çözüm olarak OPEN_CURSORS değerini artırın: ALTER SYSTEM SET OPEN_CURSORS = 1000. JDBC statement cache boyutunu gözden geçirin.