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

91

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

Никлас Густавссон
источник

Ответы:

123

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

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

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

Количество текущих активных сессий

SELECT COUNT(*)
  FROM v$session

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

Джастин Кейв
источник
извините, как мы можем выполнить этот запрос? Я получаю сообщение «Таблица или представление не существует» для «ВЫБРАТЬ СЧЕТЧИК (*) FROM v $ session»
сельский житель
3
@ yin03 - это означает, что любой пользователь Oracle, которого вы используете, не имеет прав на v$sessionпредставление. Вам нужно будет попросить администратора базы данных предоставить вам эту привилегию. Скорее всего, вам нужна select any dictionaryпривилегия, хотя select_catalog_roleроль или прямое предоставление только для этого объекта также будет работать.
Justin Cave,
38

Параметр сеансов является производным от параметра процессов и соответствующим образом изменяется при изменении максимального количества процессов. Дополнительную информацию см. В документации Oracle .

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

    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
------------- ------------------- --------------- --- --------
процессы 96 309 500
сеансов 104 323 792
FuePi
источник
34

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

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'
ДжозефСтайонс
источник
извините, как мы можем выполнить этот запрос? Я получаю сообщение «Таблица или представление не существует» для запроса «ВЫБРАТЬ СЧЕТЧИК (*) ИЗ v $ session»
житель деревни
2
@ yin03 Вы используете Oracle или другой тип базы данных? Если Oracle, это может быть проблема с разрешениями.
JosephStyons
1
безупречный запрос @JosephStyons!
Gaurav
@guarav, я рада, что вам понравилось!
JosephStyons
4

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

Если вы просто хотите узнать максимально допустимое количество сеансов, вы можете выполнить в 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 - это то, что вам нужно.

боткоп
источник
4

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

Том
источник
1
select count(*),sum(decode(status, 'ACTIVE',1,0)) from v$session where type= 'USER'
Сарис Мохаммад
источник