El origen del problema
El error ORA-00845 en Oracle Database ocurre cuando el sistema operativo Linux no puede asignar suficiente memoria compartida (/dev/shm) para satisfacer los parámetros MEMORY_TARGET o MEMORY_MAX_TARGET definidos en el archivo de inicialización (pfile o spfile) de la base de datos. El directorio /dev/shm es un sistema de archivos temporal que utiliza memoria RAM, y su tamaño por defecto suele ser la mitad de la memoria física disponible.
Cuando Oracle intenta iniciar la instancia, verifica que el tamaño de /dev/shm sea al menos igual al valor especificado en MEMORY_TARGET. Si no es así, el motor se niega a arrancar y genera el error mencionado.
Paso a paso: Solución del error ORA-00845
1. Verificar el tamaño actual de /dev/shm
Ejecuta el siguiente comando para comprobar el tamaño montado en /dev/shm:
df -h /dev/shmTambién puedes verificar los parámetros de memoria compartida del kernel con:
sysctl -a | grep shm2. Redimensionar /dev/shm dinámicamente
Para ajustar temporalmente el tamaño de /dev/shm, ejecuta:
sudo mount -o remount,size=<nuevo_tamaño> /dev/shmReemplaza <nuevo_tamaño> con un valor mayor o igual a tu MEMORY_TARGET (por ejemplo, 8G para 8 gigabytes).
3. Configuración permanente en /etc/fstab
Para hacer el cambio permanente, edita el archivo /etc/fstab:
sudo vi /etc/fstabAgrega o modifica la línea correspondiente a /dev/shm para especificar el nuevo tamaño:
tmpfs /dev/shm tmpfs defaults,size=<nuevo_tamaño> 0 04. Reiniciar los servicios de almacenamiento temporal
Para aplicar los cambios, reinicia el servicio tmp.mount:
sudo systemctl restart tmp.mount5. Verificar los cambios
Confirma que el nuevo tamaño se haya aplicado correctamente:
df -h /dev/shm6. Reiniciar la instancia de Oracle
Con el tamaño de /dev/shm ajustado, intenta reiniciar la instancia de Oracle:
sqlplus / as sysdba
STARTUPPreguntas Frecuentes (FAQs)
¿Qué sucede si /dev/shm ya tiene un tamaño suficiente pero persiste el error?
Verifica los parámetros del kernel relacionados con la memoria compartida (SEMMNI, SEMMSL, SEMMNS y SEMOPM). Puedes ajustarlos en /etc/sysctl.conf y aplicar los cambios con sysctl -p.
¿Cuál es el tamaño recomendado para MEMORY_TARGET?
El valor ideal depende de la carga de trabajo y la memoria disponible en el servidor. Oracle recomienda asignar entre el 50% y el 80% de la memoria física para MEMORY_TARGET en entornos dedicados.
¿Cómo puedo ver el valor actual de MEMORY_TARGET en mi base de datos?
Ejecuta la siguiente consulta en SQL*Plus:
SHOW PARAMETER MEMORY_TARGET;Samuel Gil es especialista en infraestructura tecnológica, administración de servidores y desarrollo de servicios digitales. Con una sólida trayectoria en entornos web de alta exigencia, optimización de servidores y gestión de arquitecturas de red, Samuel dedica su labor en faq-box.com a desglosar cuestiones técnicas complejas para convertirlas en guías prácticas, transparentes y de alto valor técnico.
Su enfoque editorial prioriza el rigor, la seguridad en los sistemas y la resolución eficiente de problemas técnicos cotidianos y avanzados. A través de sus análisis, busca ofrecer respuestas directas y contrastadas para profesionales y entusiastas del sector tecnológico.
Cuenta con una sólida formación en el área tecnológica, destacando su especialización a través del Máster en Inteligencia Artificial Aplicada a la Gestión Empresarial y el MBA in Digital Transformation & Artificial Intelligence de ISEEN.EU, lo que aporta un rigor técnico avanzado a cada análisis de desarrollo y arquitectura digital.

