Oracle 11g veritabanı bir süre önce kullanıldı, bir süre kullanıldıktan sonra (ilk başta görünmesi uzun zaman aldı ve sonra kısa bir süre sonra ortaya çıktı), ORA-04030 hatası sık sık rapor edildi.Söz konusu hata mesajı ORA-04030: Tahsis etmeye çalışılıyor ... .Byte (...) işlem belleği yetersiz.
İstisna bilgilerine göre, bunun aşırı bellek kullanımı ve yetersiz ayırmadan kaynaklandığı kolaylıkla yargılanabilir, ancak sunucunun belleğinin küçük olmaması, Oracle'ın bellek ayırırken bir sınıra sahip olması gerektiğini gösterir.Bu sınır aşıldığında , Bu hata ortaya çıkacaktır.
İnternette pek çok görüş var İşte genel kullanım için fikirlerin ve yöntemlerin bir listesi.
Bellek kullanımını kontrol etmek için temel olarak işletim sistemine özel araçları (top, topas, vmstat, swapon -s) kullanın. Yeterli bellek varsa, işletim sisteminin zorunlu kısıtlamaları olup olmadığını kontrol etmeniz gerekir. Hafıza tükendiyse, hafızanın nerede kullanıldığını bulmanız gerekir.
Hala yeterli bellek varsa, işlemin kullanması gereken bellek miktarına izin verilmiyor olabilir. İşletim sistemi sınırlarını görüntülemek için "ulimit -a" komutunu kullanın. Özellikle "veri segmenti boyutu" seçeneği için sınırsız olarak ayarlanmalıdır. Bir RAC veya GRID ortamında, veritabanı izleme CRS aracılığıyla başlatıldığı için izleme, kök kullanıcının ulimit sınırını devralır. Kökün ulimit sınırındaki veri sınırı (kbayt) 1310kb ise, bu, bağlantıyı izleyen her işlem tarafından ayrılabilen bellek kaynaklarının 1310kb'yi aşamayacağı anlamına gelir.
Bir örneğin tahsis edebileceği toplam PGA miktarını sınırlayan PGA_AGGREGATE_TARGET sorgu parametresinin boyutu. Aşağıdaki sorgu, tüm oturumların PGA alanına ayrılan toplam bellek miktarını bulmak için kullanılır:
TOPLA SEÇ (DEĞER) / 1024/1024 PGA_SIZE_MB V $ SESSTAT S, V $ STATNAME N'DEN NEREDE N.STATISTIC # = S.STATISTIC # AND NAME = 'oturum pga belleği';Bazı işlemler, örneğin büyük PL / SQL tabloları veya çok sayıda sıralama işlemi gibi çok fazla işlem belleği gerektirir.
Aşağıdaki sorgu, tüm Oracle süreçlerinin PGA ve UGA boyutlarını bulmak için kullanılabilir:
SID, NAME, VALUE SEÇ V $ STATNAME N, V $ SESSTAT S'DEN NEREDE N.STATISTIC # = S.STATISTIC # AND NAME GİBİ oturum% memory% ' 3 ASC İLE SİPARİŞ;Genel olarak, işlem belleği kullanımını işletim sistemi açısından doğrulamanın iyi bir yoludur. Sonuçta, çok fazla bellek kullanan mutlaka Oracle Server işlemi değildir.
Yığın boşaltma yapabilir ve ardından döküm sonuçlarını analiz edebilirsiniz:
SQL > v $ işlem p, v $ oturum s'den PID'yi seçin, burada p.addr = s.paddr ve sid = < SID > ; SQL > oradebug setorapid < PID > SQL > oradebug unlimit SQL > oradebug dökümü errorstack 3 SQL > oradebug dökümü yığın boşaltma 536870917 SQL > oradebug tracefile_name (yol ve dosya adı bilgilerini gösterir) SQL > oradebug close_traceVeya etkinliği aşağıdaki gibi kullanın:
ORA-04030 hatası oluştuğunda izleme dosyasını oluşturmak için sistem düzeyinde olayı ayarlayın.Olayı aşağıdaki gibi ayarlayın:
sistem kümesi olaylarını değiştir '4030 izleme adı hata yığını düzeyi 3; adı HEAPDUMP düzeyi 536870917';Hata içeren döküm dosyasını aldıktan sonra, olay oluşturmayı kapatın:
sistem kümesi olaylarını değiştir '4030 izleme adı hata yığını kapalı'; sistem seti olaylarını değiştir '4030 izleme adı HEAPDUMP off';Aslında, ORA-04030'un nedeni, daha fazla belleğin ayrılamamasıdır.İki çözüm vardır, biri belleği arttırmak, diğeri bellek ayırmayı akım için daha uygun hale getirmek için oracle bellek kontrol parametrelerini ayarlamaktır. s uygulaması.
Daha fazla devop ve DBA içeriği daha sonra paylaşılacak ve ilgilenen arkadaşlar buna dikkat edebilir! !