En esta oportunidad quiero compartir un error típico que aparece cuando estamos lo más bien trabajando con Apex en una instalación en Glassfish y cada cierto tiempo no podemos conectarnos y nos aparece el error 404.
Si buscamos en el log del Servidor veremos que nos sale los error como lo que te muestro abajo:
The pool named: apex is not correctly configured, error: IO Error: The Network Adapter could not establish the connection
The pool named: apex_pu is not correctly configured, error: IO Error: The Network Adapter could not establish the connection
The pool named: apex_al is not correctly configured, error: IO Error: The Network Adapter could not establish the connection
The pool named: apex_rt is not correctly configured, error: IO Error: The Network Adapter could not establish the connection
En este caso en particular, si no has cambiado nada en la configuración y de repente no te puedes conectar, y tienes una base de datos Oracle 11g para arriba, lo más probable que te suceda es que se ha expirado el tiempo de la password en la base de datos Oracle 11g.
Según la documentación de Oracle, nos dice:
«In the default profile in Oracle Database 11g, the parameter PASSWORD_LIFE_TIME is set to 180. If you are using Oracle Database 11g with Oracle Application Express, this causes the password for APEX_PUBLIC_USER to expire in 180 days. As a result, your Oracle Application Express instance will become unusable until you change the password.”
Básicamente tenemos el parámetro PASSWORD_LIFE_TIME que en el profile por default está configurado en 180 días, y es eso lo que causa que se expire la password del usuario APEX_PUBLIC_USER y no podamos ingresar a APEX.
Para ello lo que necesitaríamos hacer es cambiar el parámetro PASSWORD_LIFE_TIME a ilimitada y hacer un alter al usuario APEX_PUBLIC_USER y asignarlo a un nuevo profile.
En primer lugar vamos a ver cuáles son los límites del perfil por defecto (o el perfil de su APEX_PUBLIC_USER) son:
select resource_name, limit
from dba_profiles
where profile = ‘DEFAULT’;
El resultado dela consulta se vería algo similar a esto:
RESOURCE_NAME LIMIT
——————————– ——————————–
COMPOSITE_LIMIT UNLIMITED
SESSIONS_PER_USER UNLIMITED
CPU_PER_SESSION UNLIMITED
CPU_PER_CALL UNLIMITED
LOGICAL_READS_PER_SESSION UNLIMITED
LOGICAL_READS_PER_CALL UNLIMITED
IDLE_TIME UNLIMITED
CONNECT_TIME UNLIMITED
PRIVATE_SGA UNLIMITED
FAILED_LOGIN_ATTEMPTS 10
PASSWORD_LIFE_TIME 180
PASSWORD_REUSE_TIME UNLIMITED
PASSWORD_REUSE_MAX UNLIMITED
PASSWORD_VERIFY_FUNCTION NULL
PASSWORD_LOCK_TIME 1
PASSWORD_GRACE_TIME 7
16 rows selected.
No es buena práctica cambiar el profile por default por temas de seguridad, es por ello que lo que podemos hacer es crear un nuevo profile y luego asignarlo al usuario APEX_PUBLIC_USER.
create profile apex_public limit password_life_time unlimited;
alter user apex_public_user profile apex_public;
También tenemos que asignar el profile a las cuentas apex_listener, apex_rest_public_user y ords_public_user:
alter user apex_listener profile apex_public;
alter user apex_rest_public_user profile apex_public;
alter user ords_public_user profile apex_public;
De esta forma no vamos a tener el problema de que se expira el password cada 180 días y tendremos acceso a nuestro APEX sin problemas.
Si ejecutamos la consulta:
select resource_name, limit
from dba_profiles
where profile = ‘APEX_PUBLIC’;
Vemos que el parámetro está configurado como ilimitado:
RESOURCE_NAME LIMIT
———————— ————————————
COMPOSITE_LIMIT DEFAULT
SESSIONS_PER_USER DEFAULT
CPU_PER_SESSION DEFAULT
CPU_PER_CALL DEFAULT
LOGICAL_READS_PER_SESSION DEFAULT
LOGICAL_READS_PER_CALL DEFAULT
IDLE_TIME DEFAULT
CONNECT_TIME DEFAULT
PRIVATE_SGA DEFAULT
FAILED_LOGIN_ATTEMPTS DEFAULT
PASSWORD_LIFE_TIME UNLIMITED
PASSWORD_REUSE_TIME DEFAULT
PASSWORD_REUSE_MAX DEFAULT
PASSWORD_VERIFY_FUNCTION DEFAULT
PASSWORD_LOCK_TIME DEFAULT
PASSWORD_GRACE_TIME DEFAULT
16 rows selected.