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

89

Quelle est la meilleure façon, à l'aide de SQL, de vérifier le nombre maximum de connexions autorisées pour une base de données Oracle? En fin de compte, je voudrais afficher le nombre actuel de sessions et le nombre total autorisé, par exemple "Actuellement, 23 connexions sur 80 sont utilisées".

Niklas Gustavsson
la source

Réponses:

120

Il existe quelques limites différentes qui peuvent entrer en jeu pour déterminer le nombre de connexions qu'une base de données Oracle prend en charge. L'approche la plus simple serait d'utiliser le paramètre SESSIONS et V $ SESSION, c'est-à-dire

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, 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é. Si le serveur partagé est ignoré, vous pouvez bien atteindre la limite du paramètre PROCESSES avant d'atteindre la limite 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.

Justin Cave
la source
désolé, comment pouvons-nous exécuter cette requête? Je reçois "table ou vue inexistante" pour "SELECT COUNT (*) FROM v $ session"
villageois
3
@ yin03 - Cela implique que quel que soit l'utilisateur Oracle que vous utilisez, n'a pas de privilèges sur la v$sessionvue. Vous devrez demander à votre DBA de vous accorder ce privilège. Très probablement, vous voudriez le select any dictionaryprivilège bien que le select_catalog_rolerôle ou une attribution directe sur cet objet fonctionne également.
Justin Cave
35

Le paramètre sessions est dérivé du paramètre process et change en conséquence lorsque vous modifiez le nombre de processus max. Consultez la 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
------------- ------------------- --------------- --- --------
processus 96309500
séances 104 323 792
FuePi
la source
34

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'
JosephStyons
la source
désolé, comment pouvons-nous exécuter cette requête? Je reçois "table ou vue inexistante" pour "SELECT COUNT (*) FROM v $ session"
villageois
2
@ yin03 Utilisez-vous Oracle ou un autre type de base de données? Si Oracle, cela peut être un problème d'autorisations.
JosephStyons
1
requête parfaite @JosephStyons!
Gaurav
@guarav, je suis content que vous l'ayez trouvé utile!
JosephStyons
4

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 dans sqlplus, comme 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 souhaitez.

botkop
la source
4

Utilisez gv $ session pour RAC, si vous souhaitez obtenir le nombre total de sessions dans le cluster.

À M
la source
1
select count(*),sum(decode(status, 'ACTIVE',1,0)) from v$session where type= 'USER'
saris mohammad
la source