Come verificare il numero massimo di connessioni consentite a un database Oracle?


89

Qual è il modo migliore, utilizzando SQL, per verificare il numero massimo di connessioni consentito per un database Oracle? Alla fine, vorrei mostrare il numero corrente di sessioni e il numero totale consentito, ad esempio "Attualmente, vengono utilizzate 23 connessioni su 80".

Risposte:


120

Ci sono alcuni limiti diversi che potrebbero entrare in gioco nel determinare il numero di connessioni supportate da un database Oracle. L'approccio più semplice sarebbe utilizzare il parametro SESSIONS e V $ SESSION, ovvero

Il numero di sessioni che il database è stato configurato per consentire

SELECT name, value 
  FROM v$parameter
 WHERE name = 'sessions'

Il numero di sessioni attualmente attive

SELECT COUNT(*)
  FROM v$session

Come ho detto, tuttavia, ci sono altri potenziali limiti sia a livello di database che a livello di sistema operativo ea seconda che il server condiviso sia stato configurato. Se il server condiviso viene ignorato, potresti raggiungere il limite del parametro PROCESSES prima di raggiungere il limite del parametro SESSIONS. E potresti raggiungere i limiti del sistema operativo perché ogni sessione richiede una certa quantità di RAM.


scusa, come possiamo eseguire questa query? Ricevo "tabella o vista non esistente" per "SELEZIONA COUNT (*) FROM v $ session"
villager

3
@ yin03 - Ciò implica che qualsiasi utente Oracle che stai utilizzando non abbia privilegi sulla v$sessionvisualizzazione. Dovresti chiedere al tuo DBA di concederti quel privilegio. Molto probabilmente, vorresti il select any dictionaryprivilegio sebbene funzionasse anche il select_catalog_roleruolo o una concessione diretta su quell'oggetto.
Justin Cave

35

Il parametro delle sessioni deriva dal parametro dei processi e cambia di conseguenza quando si modifica il numero massimo di processi. Vedere i documenti Oracle per ulteriori informazioni.

Per ottenere solo le informazioni sulle sessioni:

    select current_utilization, limit_value 
    from v$resource_limit 
    where resource_name='sessions';
CURRENT_UTILIZATION LIMIT_VALUE
------------------- -----------
                110 792

Prova questo per mostrare informazioni su entrambi:

    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
------------- ------------------- --------------- --- --------
processi 96 309 500
sessioni 104323792

34

Ho pensato che avrebbe funzionato, sulla base di questa fonte .

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

Tuttavia, Justin Cave ha ragione. Questa query fornisce risultati migliori:

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'

scusa, come possiamo eseguire questa query? Ricevo "tabella o vista non esistente" per "SELEZIONA COUNT (*) FROM v $ session"
villager

2
@ yin03 Stai usando Oracle o un altro tipo di database? Se Oracle, potrebbe essere un problema di autorizzazioni.
JosephStyons

1
query impeccabile @JosephStyons!
Gaurav

@guarav, sono contento che tu l'abbia trovato utile!
JosephStyons

4

Nota: questo risponde solo a una parte della domanda.

Se vuoi solo conoscere il numero massimo di sessioni consentite, puoi eseguire in sqlplus, come sysdba:

SQL> show parameter sessions

Questo ti dà un output come:

    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

Il parametro delle sessioni è quello che vuoi.


4

Usa gv $ session per RAC, se vuoi ottenere il numero totale di sessioni nel cluster.



1
select count(*),sum(decode(status, 'ACTIVE',1,0)) from v$session where type= 'USER'
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.