Существует несколько различных ограничений, которые могут сыграть роль при определении количества подключений, поддерживаемых базой данных Oracle. Самый простой подход - использовать параметр SESSIONS и V $ SESSION, т.е.
Количество сеансов, которые база данных была настроена для разрешения
SELECT name, value
FROM v$parameter
WHERE name = 'sessions'
Количество текущих активных сессий
SELECT COUNT(*)
FROM v$session
Однако, как я уже сказал, существуют другие потенциальные ограничения как на уровне базы данных, так и на уровне операционной системы, а также в зависимости от того, был ли настроен общий сервер. Если общий сервер игнорируется, вы вполне можете достичь предела параметра PROCESSES до того, как достигнете предела параметра SESSIONS. И вы можете выйти за пределы операционной системы, потому что каждый сеанс требует определенного количества оперативной памяти.
v$session
представление. Вам нужно будет попросить администратора базы данных предоставить вам эту привилегию. Скорее всего, вам нужнаselect any dictionary
привилегия, хотяselect_catalog_role
роль или прямое предоставление только для этого объекта также будет работать.Параметр сеансов является производным от параметра процессов и соответствующим образом изменяется при изменении максимального количества процессов. Дополнительную информацию см. В документации Oracle .
Чтобы получить информацию только о сеансах:
select current_utilization, limit_value from v$resource_limit where resource_name='sessions';
Попробуйте это, чтобы показать информацию об обоих:
select resource_name, current_utilization, max_utilization, limit_value from v$resource_limit where resource_name in ('sessions', 'processes');
источник
Я думал, что это сработает, основываясь на этом источнике .
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'
источник
Примечание: это отвечает только на часть вопроса.
Если вы просто хотите узнать максимально допустимое количество сеансов, вы можете выполнить в 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
Параметр sessions - это то, что вам нужно.
источник
Используйте gv $ session для RAC, если вы хотите получить общее количество сеансов в кластере.
источник
v $ resource_limit мне так интересно посмотреть сеансы, процессы 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'
источник