Solaris işletim sistemindeki “ORA-27102: out of memory Error” hatası

1 Eyl by Ahmet Duruöz

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.

Loading

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir