Oracle hataları

ORA-04031: unable to allocate shared memory

Paylaşılan bellek ayrılamadı

ORA-04031: unable to allocate N bytes of shared memory ("shared pool","...","...","...")

SGA’daki bir bellek havuzu, çoğunlukla shared pool, bitişik bir parça sağlayamadı. Yaygın nedenler bind değişkeni kullanmayan SQL, küçük bir havuz ya da parçalanmadır. Önce bind değişkenlerine geçin; havuzu boşaltmak yalnızca geçici rahatlama sağlar.

ORA-04031 ne demek?

Shared pool, ayrıştırılmış SQL’i, PL/SQL’i ve sözlük verisini tutar. Uygulama yalnızca sabit değerleri farklı binlerce ifade gönderirse her biri kendi belleğini alır, havuz parçalanır ve sonunda bir istek karşılanamaz. Mesaj havuzun adını söyler: shared pool, large pool, java pool ya da streams pool.

ORA-04031 neden olur?

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

  1. Hangi bileşenin sıkıştığını V$SGASTAT ve V$SGA_RESIZE_OPS ile görün.
  2. Sabit değerli SQL’i bulun: V$SQLAREA’yı FORCE_MATCHING_SIGNATURE’a göre gruplayın.
  3. Uygulamayı bind değişkenleriyle düzeltin. CURSOR_SHARING = FORCE, önce test edilmesi gereken geçici bir çözümdür.
  4. SGA gerçekten küçükse büyütün. ALTER SYSTEM FLUSH SHARED_POOL kısa süreli rahatlama sağlar ve ardından yoğun bir hard parse dalgası getirir.

ORA-04031 örneği

Yalnızca sabit değerleri farklı ifadeler:

SELECT force_matching_signature, COUNT(*) AS varyant, MIN(sql_text) AS ornek
  FROM v$sqlarea
 WHERE force_matching_signature <> 0
 GROUP BY force_matching_signature
HAVING COUNT(*) > 50
 ORDER BY varyant DESC;

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

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