ORA-27102: out of memory

The 536,870,912 byte (512×2 20 ) capacity of t...

Image via Wikipedia

Parámetros del Kernel

Si contamos con una versión de ORACLE y un SO Linux ambos de 64 bits, al tratar de aumentar el SGA a la mitad de memoria RAM disponible,
ocurre un error ORA-27102 que no permite levantar la o las instancias aunque el parametro del kernel shmmax este establecido para que coincida con la mitad de la cantidad de memoria RAM.

Podemos tomar como referencia también la nota de metalink [ID 301830.1]

En mi caso particular estaba trabajando con un RAC de dos nodos y cuando agregue memoria a la instancia y reinicio, al levantar con los comandos de RAC srvctl me encuentro con el siguiente error

srvctl start database -d MANUPRO -o open
PRKP-1001 : Error starting instance MANUPRO01 on node node1
CRS-0215: Could not start resource 'ora.MANUPRO.MANUPRO1.inst'.
PRKP-1001 : Error starting instance MANUPRO on node node2
CRS-0215: Could not start resource 'ora.MANUPRO.MANUPRO2.inst'.

Entonces desde una de las las instancias del RAC me logueo a la base y la intento levantar a mano arrojandome el siguiente error:

SQL> startup nomount
ORA-27102: out of memory
Linux-x86_64 Error: 28: No space left on device
Changes

Esto ocurre por que el parámetro shmall es muy pequeño o no se encuentra seteado. Si se encuentra viene seteado por default en 2097152 en la mayoria de los casos.

Tenemos que setear el parámetro shmall que se encuentra en e archivo de configuración l /etc/sysctl.conf igual a la sumatoria de las SGA’s en el sistema dividida por el tamaño de la página (page size).

Al chequeo del page size lo podemos realizar de la siguiente manera:

$ getconf PAGE_SIZE
4096

En el caso de que existiera el parámetro podemos ver su dimesión con un simple cateo del archivo /proc/sys/kernel/shmall

$ cat /proc/sys/kernel/shmall
2097152

Una vez que hayamos insertado los nuevos valores ( con el usuario root ) procedemos a ver su implemetacíon.

root@saturno1 ~]# sysctl -p
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default = 262144
net.core.rmem_max = 262144
net.core.wmem_default = 262144
net.core.wmem_max = 262144
kernel.sem = 250 32000 100 128
kernel.shmmax = 12884901888
kernel.shmall = 3145728

Ahora como prueba puedp poner la base en modo NOMOUNT para poder verificar que el cambio de los parámetros haya tenido su resultado esperado.

SQL> startup nomount ORACLE instance started.Total System Global Area 4294967296 bytes
Fixed Size            2089472 bytes
Variable Size         3959426560 bytes
Database Buffers      318767104 bytes
Redo Buffers           14684160 bytes
SQL> alter database mount;Database altered.

En el caso mío, como es una base en que está en RAC lo levanto con los comandos correspondientes y verifico el status OK.

[oracle@saturno01 bin]$ srvctl status database -d MANUPRO - o open
Instance MANUPRO1 is running on node saturno01
Instance MANUPRO2 is running on node saturno02

About Juan Andres
Consultant | Oracle DBA & IT Specialist | LinuxUnix Administrator | Father | Musician | Farmer | Environmentalist | Writer | Builder | Buenos Aires · burzaco.wordpress.com

3 Responses to ORA-27102: out of memory

  1. Una pregunta,

    A mi me da el mismo error. Tengo un sistema con 16 Gb de RAM y una Base de Datos con SGA de 7.5 GB. Si la intento poner la SGA a mas de 8 Gb me da el error.

    Si miro en mi sistema no el shmall (que lo tengo a 2097102) sino al shmmax lo tengo a 8589934592 . ¿puede ser que necesite ampliar el SHMMAX para superar en la SGA los 8 GB?

    Gacias.

    • Juan Andres says:

      Javier:
      Estuve de vacaciones, si te interesa ahun o persiste tu problematica te cuento :

      1) Tenes que sumar todas las SGA’s de las instancias que tengas, por ejemplo si tenes 4 instancias con 1024M cada una en total tenes 4096M. No el total de Memoria del server.
      2) A eso lo dividis por el tamaño de la pagina que tenes (Page size)
      3) Como resultado te da el valor del parametro shmall.
      4) El parametro del OS shmmax , esta referenciado a controlar el tamaño maximo del segmento compartido memoria. Conceptualmente es otra cosa totalmente diferente.

      Juan Andres.

  2. Perfecto, me ha funcionado al hacer como bien indicabas en el foro y despues en la respuesta, sumando las SGA y diviendo por el tamaño de página.

    Gracias.

%d bloggers like this: