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
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.
LikeLike
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.
LikeLike
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.
LikeLike