ORA-04031: Unable to allocate N bytes of shared memory (no se pueden asignar N bytes de memoria compartida)
Oracle¿Qué significa?
Oracle no pudo asignar memoria contigua del tamaño solicitado en un pool de memoria compartida (normalmente el shared pool o el large pool). Un componente de la SGA está bajo presión de memoria.
¿Por qué ocurre?
Fragmentación del shared pool por muchas sentencias SQL únicas sin variables bind (llenas de literales), SHARED_POOL_SIZE insuficiente, demasiadas conexiones concurrentes, paquetes PL/SQL grandes o un dimensionamiento ASMM/AMM incorrecto.
Cómo solucionarlo
Compruebe a qué pool se refiere el mensaje de error (shared pool, large pool, etc.). A corto plazo: ALTER SYSTEM FLUSH SHARED_POOL (precaución: en producción obliga a volver a analizar todo el SQL, es decir, una tormenta temporal de hard parse, y no corrige la fragmentación de forma permanente). Solución permanente: imponga el uso de variables bind (incluido CURSOR_SHARING), aumente SGA_TARGET / SHARED_POOL_SIZE / LARGE_POOL_SIZE. Fije en memoria los paquetes de uso frecuente con DBMS_SHARED_POOL.KEEP. Examine la distribución de memoria con V$SGASTAT.
Más entradas de este motor
- ORA-01017Invalid username/password; logon denied (usuario/contraseña no válidos; inicio de sesión denegado)
- ORA-01555Snapshot too old: rollback segment number too small (snapshot demasiado antiguo)
- ORA-01652Unable to extend temp segment by N in tablespace (no se puede extender el segmento temporal en el tablespace)
- ORA-12154TNS: could not resolve the connect identifier specified (no se pudo resolver el identificador de conexión)
- ORA-12514TNS: listener does not currently know of service requested in connect descriptor (el listener no conoce el servicio solicitado)
- ORA-00942Table or view does not exist (la tabla o vista no existe)
- ORA-01031Insufficient privileges (privilegios insuficientes)