Solaris işletim sistemindeki “ORA-27102: out of memory Error” hatası
Hata :
Oracle başlatılırken ORA-27102 hatası geliyor.
SQL> startup ORA-27102: out of memory SVR4 Error: 22: Invalid argument
Sebep:
Solaris üzerindeki Oracle SGA/PGA boyutuna bağlı olarak oluşturmak istediği shared memory segment , işletim sistemi tarafından, shm parametresinden büyük bulunduğundan , izin verilmiyor. Oracle kullanıcısının projesinde belirtilen değerin değiştirilmesi gerekiyor. max-shm-memory parametresinin varsayılan değeri fiziksel belleğin dörtte biri kadardır.
Alert<SID>.log dosyasında “WARNING: EINVAL creating segment of size 0x000000028a006000” şeklinde uyarı görülebilir.
$ prtconf | grep Mem Memory size: 32760 Megabytes 4 id -p uid=59008(oracle) gid=10001(dba) projid=3(default) $ prctl -n project.max-shm-memory -i project 3 project: 3: default NAME PRIVILEGE VALUE FLAG ACTION RECIPIENT project.max-shm-memory privileged 7.84GB - deny - system 16.0EB max deny -
Çözüm :
Solaris 9 ve öncesinde /etc/system dosyasına aşağıdaki satırı ekleyip yeniden başlatıldığında sorun çözülecektir. 0x000000028a006000 şeklindeki değer, parametrenin yeni değer olacak şekilde değiştirilmelidir.
set shminfo_shmmax = 0x000000028a006000
Solaris 10 ve sonrası için
Değişikliğin kalıcı olması için oracle kullanıcısı için, yeni parametre değeri ile, yeni bir proje oluşturulmalıdır. Bunun için aşağıdaki komut kullanılabilir. (Çok sayıda için kullandım farkındayım )
102 numaralı proje olmadığını varsayarsak,
$ projadd -p 102 -c 'Oracle Project' -U oracle -G dba -K 'project.max-shm-memory=privileged,10G,deny)' OASB
Aşağıdaki komutlarla ile yeni projeyi kontrol edebilirsiniz.
$ projects -l ... ... OASB projid : 102 comment: "Oracle Project" users : oracle groups : dba attribs: project.max-shm-memory=(privileged,10737418240,deny) $ cat /etc/project ... ... OASB:102:Oracle Project:oracle:dba:project.max-shm-memory=privileged,10737418240,deny)
Eğer geçici olarak değiştirmek istersek :
Oracle kullanıcısının projesindeki ilgili parametrenin değerini değiştirmek yeterli olacaktır.
Oracle kullanıcısı ile önce proje id bulunur:
$ id -p uid=XXXXX(oracle) gid=XXXXX(dba) projid=3(default)
Geçerli değer tespit edilir:
$ prctl -n project.max-shm-memory -i project 3 project: 3: default NAME PRIVILEGE VALUE FLAG ACTION RECIPIENT project.max-shm-memory privileged 7.84GB - deny - system 16.0EB max deny -
Parametre değiştirilir :
$ prctl -n project.max-shm-memory -r -v 10G -i project 3
Değiştirilen değer kontrol edilir:
$ prctl -n project.max-shm-memory -i project 3 project: 3: default NAME PRIVILEGE VALUE FLAG ACTION RECIPIENT project.max-shm-memory privileged 10.0GB - deny - system 16.0EB max deny -
Değişiklik sonrasında yeniden başlatmayı denediğimizde sorunsuz açılacaktır.