Quelle est la meilleure façon, en utilisant SQL, de vérifier le nombre maximal de connexions autorisé pour une base de données Oracle? En fin de compte, je voudrais montrer le nombre actuel de sessions et le nombre total autorisé, par ex. "Actuellement, 23 connexions sur 80 sont utilisées".
Il existe différentes limites qui peuvent entrer en jeu pour déterminer le nombre de connexions prises en charge par une base de données Oracle. L’approche la plus simple consisterait à utiliser le paramètre SESSIONS et V $ SESSION, c.-à-d.
Le nombre de sessions que la base de données a été configurée pour permettre
SELECT name, value
FROM v$parameter
WHERE name = 'sessions'
Le nombre de sessions actuellement actives
SELECT COUNT(*)
FROM v$session
Comme je l'ai dit, cependant, il existe d'autres limites potentielles à la fois au niveau de la base de données et au niveau du système d'exploitation et selon que le serveur partagé a été configuré ou non. Si le serveur partagé est ignoré, vous pouvez atteindre la limite du paramètre PROCESSES avant celle du paramètre SESSIONS. Et vous pouvez atteindre les limites du système d'exploitation car chaque session nécessite une certaine quantité de RAM.
Je pensais que cela fonctionnerait, basé sur cette source .
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
Cependant, Justin Cave a raison. Cette requête donne de meilleurs résultats:
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'
Le paramètre sessions est dérivé du paramètre process et change en conséquence lorsque vous changer le nombre de processus max. Voir le documentation Oracle pour plus d'informations.
Pour obtenir uniquement les informations sur les sessions:
select current_utilization, limit_value
from v$resource_limit
where resource_name='sessions';
CURRENT_UTILIZATION LIMIT_VALUE ------------------- ----------- 110 792
Essayez ceci pour afficher des informations sur les deux:
select resource_name, current_utilization, max_utilization, limit_value
from v$resource_limit
where resource_name in ('sessions', 'processes');
RESOURCE_NAME CURRENT_UTILIZATION MAX_UTILIZATION LIMIT_VALUE ------------- ------------------- ---- ----------- ----------- traite 96 309 500 sessions 104 323 792
Utilisez gv $ session pour RAC si vous souhaitez obtenir le nombre total de sessions sur le cluster.
Remarque: cela ne répond qu'à une partie de la question.
Si vous voulez juste connaître le nombre maximum de sessions autorisées, vous pouvez exécuter en sqlplus, en tant que sysdba:
SQL> show parameter sessions
Cela vous donne une sortie comme:
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
Le paramètre sessions est celui que vous voulez.
la vue v $ resource_limit m’intéresse tellement de pouvoir jeter un coup d’œil sur les sessions et les processus Oracle ..:
https://bbdd-error.blogspot.com.es/2017/09/check-sessions-and-processes-limit-in.html
select count(*),sum(decode(status, 'ACTIVE',1,0)) from v$session where type= 'USER'