Как проверить максимальное количество разрешенных подключений к базе данных Oracle?

каков наилучший способ, используя SQL, проверить максимальное количество соединений, разрешенных для базы данных Oracle? В конце я хотел бы показать текущее количество сеансов и общее количество разрешенных, например "в настоящее время используется 23 из 80 соединений".

7 ответов


существует несколько различных ограничений, которые могут возникнуть при определении количества подключений, поддерживаемых базой данных Oracle. Самым простым подходом было бы использовать параметр SESSIONS и V$SESSION, т. е.

количество сеансов база данных была настроена так, чтобы разрешить

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

число активных в данный момент сеансов

SELECT COUNT(*)
  FROM v$session

Как я уже сказал, существуют и другие потенциальные ограничения как на уровне базы данных, так и на рабочем уровне уровень системы и в зависимости от того, настроен ли общий сервер. Если общий сервер игнорируется, вы можете нажать ограничение параметра PROCESSES до того, как вы нажмете ограничение параметра SESSIONS. И вы можете нажать ограничения операционной системы, потому что каждый сеанс требует определенного количества ОЗУ.


Я думал, что это сработает, основываясь на этот источник.

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

однако, Джастин Кейв прав. Этот запрос дает лучшие результаты:

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'

на сеансы параметр является производным от процессы параметр и соответственно изменяется при изменении числа Маха процессов. Вижу Oracle docs для получения дополнительной информации.

чтобы получить только информацию о сессиях:

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

попробуйте это, чтобы показать информацию о обоих:

    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

используйте сеанс GV$для RAC, если вы хотите получить общее количество сеансов в кластере.


Примечание: это отвечает только на часть вопроса.

Если вы просто хотите знать максимальное количество разрешенных сеансов, то вы можете выполнить в sqlplus, как sysdba:

SQL> show parameter sessions

это дает результат:

    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

параметр сеансов-это то, что вы хотите.


V$resource_limit view настолько интересен для меня,чтобы просмотреть сеансы 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'