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

60

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

Теги:

7 ответов

87
Лучший ответ

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

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

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

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

SELECT COUNT(*)
  FROM v$session

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

  • 0
    извините, как мы можем выполнить этот запрос? Я получаю «таблица или представление не существует» для «SELECT COUNT (*) FROM v $ session»
  • 3
    @ yin03 - Это означает, что любой пользователь Oracle, которого вы используете, не имеет привилегий в представлении v$session . Вы должны попросить своего администратора баз данных предоставить вам эту привилегию. Скорее всего, вы захотите select any dictionary привилегию, хотя роль select_catalog_role или прямое предоставление только для этого объекта также будет работать.
26

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

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'
  • 0
    извините, как мы можем выполнить этот запрос? Я получаю «таблица или представление не существует» для «SELECT COUNT (*) FROM v $ session»
  • 2
    @ yin03 Используете ли вы Oracle или другой тип базы данных? Если Oracle, это может быть проблема с разрешениями.
21

Параметр session выводится из параметра процессы и соответственно изменяется при изменении количества максимальных процессов. Дополнительную информацию см. В документах 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
------------- ------------------- --------------- -----------
processes                      96             309         500
sessions                      104             323         792
4

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

2

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

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

Параметр session - это тот, который вы хотите.

  • 6
    Объяснение понижения будет оценено
1

v $resource_limit просмотр настолько интересен для меня, чтобы заглянуть в сеансы оракула, процессы..:

https://bbdd-error.blogspot.com.es/2017/09/check-sessions-and-processes-limit-in.html

1
select count(*),sum(decode(status, 'ACTIVE',1,0)) from v$session where type= 'USER'

Ещё вопросы

Сообщество Overcoder
Наверх
Меню