Hay algunos límites diferentes que pueden entrar en juego para determinar la cantidad de conexiones que admite una base de datos Oracle. El enfoque más simple sería utilizar el parámetro SESSIONS y V $ SESSION, es decir
El número de sesiones que la base de datos estaba configurada para permitir
SELECT name, value
FROM v$parameter
WHERE name = 'sessions'
El número de sesiones actualmente activas
SELECT COUNT(*)
FROM v$session
Sin embargo, como dije, existen otros límites potenciales tanto a nivel de base de datos como a nivel de sistema operativo y dependiendo de si se ha configurado el servidor compartido. Si se ignora el servidor compartido, es posible que alcance el límite del parámetro PROCESOS antes de alcanzar el límite del parámetro SESIONES. Y puede llegar a los límites del sistema operativo porque cada sesión requiere una cierta cantidad de RAM.
v$session
vista. Debería pedirle a su DBA que le otorgue ese privilegio. Lo más probable es que desee elselect any dictionary
privilegio a través delselect_catalog_role
rol o una concesión directa solo para ese objeto.El parámetro de sesiones se deriva del parámetro de procesos y cambia en consecuencia cuando cambia el número máximo de procesos. Consulte los documentos de Oracle para obtener más información.
Para obtener solo la información sobre las sesiones:
select current_utilization, limit_value from v$resource_limit where resource_name='sessions';
Prueba esto para mostrar información sobre ambos:
select resource_name, current_utilization, max_utilization, limit_value from v$resource_limit where resource_name in ('sessions', 'processes');
fuente
Pensé que esto funcionaría, basado en esta fuente .
SELECT 'Currently, ' || (SELECT COUNT(*) FROM V$SESSION) || ' out of ' || DECODE(VL.SESSIONS_MAX,0,'unlimited',VL.SESSIONS_MAX) || ' connections are used.' AS USAGE_MESSAGE FROM V$LICENSE VL
Sin embargo, Justin Cave tiene razón. Esta consulta da mejores resultados:
SELECT 'Currently, ' || (SELECT COUNT(*) FROM V$SESSION) || ' out of ' || VP.VALUE || ' connections are used.' AS USAGE_MESSAGE FROM V$PARAMETER VP WHERE VP.NAME = 'sessions'
fuente
Nota: esto solo responde a una parte de la pregunta.
Si solo desea saber el número máximo de sesiones permitidas, puede ejecutar en sqlplus, como sysdba:
SQL> show parameter sessions
Esto le da una salida como:
NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ java_max_sessionspace_size integer 0 java_soft_sessionspace_limit integer 0 license_max_sessions integer 0 license_sessions_warning integer 0 sessions integer 248 shared_server_sessions integer
El parámetro de sesiones es el que quieres.
fuente
Utilice gv $ session para RAC, si desea obtener el número total de sesiones en el clúster.
fuente
La vista v $ resource_limit es muy interesante para mí para echar un vistazo a las sesiones de Oracle, procesos ...:
https://bbdd-error.blogspot.com.es/2017/09/check-sessions-and-processes-limit-in.html
fuente
select count(*),sum(decode(status, 'ACTIVE',1,0)) from v$session where type= 'USER'
fuente