ORA 04030 Hatası Teşhis Etme ve Çözme

ORA 04030 Hatası Teşhis Etme ve Çözme

Öncelikle hızlı çözüm için yapmanız gereken, Veritabanını kapatıp tekrar açmaktır. Bu sayede veritabanının kullandığı bellek başlangıç değerlerine gelecek ve hata aldığınız bu işleminizi yapabileceksiniz. Bu hatayı sık sık alıyorsanız yazıya devam edebilirsiniz.

ORA-04030 Hatası nedir?

Bu hata, Oracle sunucu işleminin işletim sisteminden daha fazla bellek ayıramayacağını gösterir. Bu bellek PGA’dan (Program Global Area) oluşur ve içeriği sunucu yapılandırmasına bağlıdır.  ORA-04030 Hatası bu sayede yapılan işlemin yükünü kaldırmak için daha fazla belleğe (yığın UGA veya PGA) ihtiyaç duyulduğunu gösterir.

Kısacası Ora -04030 hatası yaptığımız sorguyu icra edebilecek kadar belleğin kullanılamadığı durumlarda karşımıza çıkıyor. Bu da Oracle yüklü serverınızın(işletim sistemi) bellek yetersizliği veya Oracle RDBMS Karnel için Oracle init parametrelerinde bellek yapılandırmalarının yetersiz olduğu anlamına geliyor.

ORA-04030 ‘a ne sebep olur?

Bu hata, karşımıza, içerisinde birçok TOPLAM, SIRALAMA ve UNION ALL yapısı kullanılmış sorgularda karşımıza çıkar. Aynı zamanda büyük PL/SQL tabloları da çok belleğe ihtiyaç duyacaktır.

 

Bu hatadan kaçınmak için genel yaklaşımlar

  1. SORT_AREA_SIZE parametresi azaltılabilir. Ancak zaten çok fazla yer kaplamadığı için bundan azaltacağınız belleğin otomatik olarak PGA ya eklenmesi çok da etkili olmayacaktır.
  2. WORKAREA_SIZE_POLICY parametresini AUTO ve PGA_AGGREGATE_TARGET’i  init dosyasında tanımlamak yani otomatik PGA kullanmak ora 04030 hataları ile karşılaşma olasılığınızı azaltacaktır. PGA_AGGREGATE_TARGET oracle 9i de desteklenmemektedir.
  3. Çalışan sorgunuzu veya PL/SQL sorgunuzu Tuning araçları ile daha iyi çalışır duruma getirebilirsiniz, ki daha az belleğe ihtiyaç duysun.
  4. Windows işletim sistemi içerisinde Oracle kullanıyorsanız,daha büyük PGA için SGA alanı belleği azaltılabilir
  5. Oracle için ayırdığınız bellekler ile işletim sistemi belleğinin birbiriyle uyumlu olduğuna dikkat edin.
  6. Sunucu’da yeteri kadar ram (bellek) olduğundan emin olun.
  7. Çalıştırdığınız sorguyu Pipelined Function ile döndürün. İlgili Örnekler için Pipelined Fonksiyonu yazıma bakabilirsiniz.

Peki bu sorunu ben nasıl çözdüm ?

Oracle Startup edilirken bir pfile veya spfile ile önyüklenir. Yani bir dosya içerisinde Oracle ‘ın  önyükleme parametreleri mevcuttur. Bu dosya bende “init.ora” dosyasıydı. Burada 4 adet parametreyi değiştirdim. Yukarıdaki aşamaları kontrol ettiğimde zaten 32 GB’ lik bir belleğe sahip serverım vardı. Dolayısı ile İşletim sisteminin Oracle’ın istediği bellekleri ayıramama gibi bir durumu olmayacaktı.
Oracle’ın açılışta istediği bellek parametrelerine baktığımda aşağıdaki gibi,
PGA_AGGREGATE_TARGET :2G
PGA_AGGREGATE_LIMIT:400M
SGA_MAX_SIZE=4G
SGA_TARGET=3G

olarak ayarlanmıştı. Benim sorgum 7 ile 8 dakika civarında çalışıp ardından ORA-04030 PGA_AGGREGATE_LIMIT hatası alıyordum. Ardından

Pga_aggregate_limit’i 8gb’a ve Pga_aggregate_target değerini 2gb’a çevirdim. Ancak bu sefer de ORA- 04030 XXX kadar byte ayrılmaya çalışırken işlem doldu gibi bir hata ile devamlı karşılaşmaya başladım. Bu sefer de İşletim Sistemi Oracle için yeterli belleği ayıramıyordu.

Ardından SGA _MAX_SIZE=16G , SGA_TARGET=12G yaptığımda artık hata almadan 8 10 dakika içerisinde sorgumun sonucunu alabilir hale geldim.

Sonrasında PGA_AGGREGATE_LIMIT=1600M, PGA_AGGREGATE_TARGET=3200M yapmam dahi sorgumun ORA-04030 Hatası ile karşılaşmaması için yeterli oldu.

Yeni sistem parametre değerleri aşağıdaki gibi olduğunda birdaha sorun yaşamadım,

PGA_AGGREGATE_TARGET 4000M
PGA_AGGREGATE_LIMIT:2000M
SGA_MAX_SIZE=16G
SGA_TARGET=12G

Daha faydalı yazılarda görüşmek dileğiyle 🙂



Faydalandığım Kaynak

 

Ora 04030 hatası
Ora 04030 hatası