Istnieje kilka różnych ograniczeń, które mogą wpłynąć na określenie liczby połączeń obsługiwanych przez bazę danych Oracle. Najprostszym podejściem byłoby użycie parametru SESSIONS i V $ SESSION, czyli
Liczba sesji, na które baza danych została skonfigurowana
SELECT name, value
FROM v$parameter
WHERE name = 'sessions'
Liczba aktualnie aktywnych sesji
SELECT COUNT(*)
FROM v$session
Jak powiedziałem, istnieją jednak inne potencjalne ograniczenia, zarówno na poziomie bazy danych, jak i na poziomie systemu operacyjnego oraz w zależności od tego, czy skonfigurowano serwer współdzielony. Jeśli serwer współdzielony jest ignorowany, możesz przekroczyć limit parametru PROCESSES, zanim osiągniesz limit parametru SESSIONS. Możesz też przekroczyć ograniczenia systemu operacyjnego, ponieważ każda sesja wymaga określonej ilości pamięci RAM.
v$session
widoku. Musisz poprosić swojego administratora o przyznanie Ci tego przywileju. Najprawdopodobniej chciałbyś miećselect any dictionary
przywilej, chociażselect_catalog_role
rola lub bezpośrednie nadanie tylko dla tego obiektu również działałoby.Te sesje parametr jest pochodną procesów parametru i zmienia się odpowiednio w przypadku zmiany liczby procesów max. Więcej informacji można znaleźć w dokumentacji Oracle .
Aby uzyskać tylko informacje o sesjach:
select current_utilization, limit_value from v$resource_limit where resource_name='sessions';
Spróbuj tego, aby wyświetlić informacje o obu:
select resource_name, current_utilization, max_utilization, limit_value from v$resource_limit where resource_name in ('sessions', 'processes');
źródło
Myślałem, że to zadziała, opierając się na tym źródle .
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
Jednak Justin Cave ma rację. To zapytanie daje lepsze wyniki:
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'
źródło
Uwaga: to tylko odpowiada na część pytania.
Jeśli chcesz tylko poznać maksymalną dozwoloną liczbę sesji, możesz wykonać w sqlplus, jako sysdba:
SQL> show parameter sessions
Daje to wynik podobny do:
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
Parametr sesji jest tym, czego chcesz.
źródło
Użyj sesji gv $ dla RAC, jeśli chcesz uzyskać całkowitą liczbę sesji w klastrze.
źródło
v Widok $ resource_limit jest dla mnie tak interesujący, żebym mógł rzucić okiem na sesje i procesy oracle ..:
https://bbdd-error.blogspot.com.es/2017/09/check-sessions-and-processes-limit-in.html
źródło
select count(*),sum(decode(status, 'ACTIVE',1,0)) from v$session where type= 'USER'
źródło