95 votes

Comment vérifier le nombre maximal de connexions autorisées à une base de données Oracle ?

Quelle est la meilleure façon, en utilisant SQL, de vérifier le nombre maximum de connexions autorisées pour une base de données Oracle ? En fin de compte, j'aimerais afficher le nombre actuel de sessions et le nombre total autorisé, par exemple : "Actuellement, 23 des 80 connexions sont utilisées".

124voto

Justin Cave Points 114578

Il y a quelques limites différentes qui peuvent entrer en jeu pour déterminer le nombre de connexions qu'une base de données Oracle supporte. L'approche la plus simple consiste à utiliser le paramètre SESSIONS et V$SESSION, soit

Le nombre de sessions que la base de données a été configurée pour autoriser.

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, il existe cependant d'autres limites potentielles, tant au niveau de la base de données qu'au niveau du système d'exploitation et selon que le serveur partagé a été configuré ou non. Si le serveur partagé est ignoré, il se peut que vous atteigniez la limite du paramètre PROCESSES avant d'atteindre la limite du paramètre SESSIONS. Et vous risquez d'atteindre les limites du système d'exploitation, car chaque session nécessite une certaine quantité de RAM.

1 votes

Désolé, comment pouvons-nous exécuter cette requête ? Je reçois "table or view not exist" pour "SELECT COUNT(*) FROM v$session".

4 votes

@yin03 - Cela implique que l'utilisateur Oracle que vous utilisez, quel qu'il soit, n'a pas de privilèges sur l'ordinateur de l'entreprise. v$session vue. Vous devez demander à votre DBA de vous accorder ce privilège. Le plus souvent, vous voudrez que le select any dictionary privilège bien que le select_catalog_role ou une subvention directe sur ce seul objet fonctionnerait également.

0 votes

ORA-00942 : "La table ou la vue n'existe pas".

39voto

FuePi Points 541

Le site sessions est dérivé du paramètre processus et change en conséquence lorsque vous modifiez le nombre de processus maximum. Voir le Documents d'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
------------- ------------------- --------------- -----------
processes                      96             309         500
sessions                      104             323         792

34voto

JosephStyons Points 21187

Je pensais que ça marcherait, en me basant 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'

0 votes

Désolé, comment pouvons-nous exécuter cette requête ? Je reçois "table or view not exist" pour "SELECT COUNT(*) FROM v$session".

2 votes

@yin03 Utilisez-vous Oracle ou un autre type de base de données ? Si vous utilisez Oracle, il peut s'agir d'un problème de permissions.

1 votes

requête impeccable @JosephStyons !

5voto

Koen Dejonghe Points 33

Remarque : cela ne répond qu'à une partie de la question.

Si vous voulez simplement connaître le nombre maximum de sessions autorisées, vous pouvez l'exécuter dans 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 des sessions est celui que vous voulez.

4voto

Tom Points 41

Utilisez gv$session pour RAC, si vous voulez obtenir le nombre total de sessions à travers le cluster.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X