Як перевірити максимальну кількість дозволених підключень до бази даних Oracle?


90

Який найкращий спосіб, використовуючи SQL, перевірити максимальну кількість підключень, яка дозволена для бази даних Oracle? Врешті-решт, я хотів би показати поточну кількість сеансів та загальну дозволену кількість, наприклад "На даний момент використовується 23 із 80 з'єднань".

Відповіді:


121

Існує кілька різних обмежень, які можуть виникнути при визначенні кількості з'єднань, які підтримує база даних Oracle. Найпростішим підходом було б використання параметра SESSIONS та V $ SESSION, тобто

Кількість сеансів, налаштованих на базу даних

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

Кількість активних сеансів

SELECT COUNT(*)
  FROM v$session

Як я вже говорив, існують інші потенційні обмеження як на рівні бази даних, так і на рівні операційної системи, а також залежно від того, чи було налаштовано спільний сервер. Якщо спільний сервер ігнорується, ви цілком можете досягти межі параметра PROCESSES, перш ніж досягти межі параметра SESSIONS. І ви можете досягти обмежень операційної системи, оскільки кожен сеанс вимагає певної кількості оперативної пам'яті.


вибачте, як ми можемо запустити цей запит? Я отримую "таблиця або подання не існує" для "ВИБЕРИТИ КІЛЬКУ (*) ВІД $ $ сеансу"
житель села

3
@ yin03 - Це означає, що будь-який користувач Oracle, яким ви користуєтесь, не має привілеїв на v$sessionподання. Вам потрібно буде попросити ваш DBA надати вам цю привілею. Швидше за все, ви хотіли б отримати select any dictionaryпривілей, хоча select_catalog_roleроль або прямий дозвіл лише на цей об'єкт також працювали б.
Джастін Кейв

36

Параметр сеансів походить від параметра процеси і відповідно змінюється при зміні кількості максимальних процесів. Додаткову інформацію див. У документації 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

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'

вибачте, як ми можемо запустити цей запит? Я отримую "таблиця або подання не існує" для "ВИБЕРИТИ КІЛЬКУ (*) ВІД $ $ сеансу"
житель села

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

Параметр сеансів - це той, який ви хочете.


4

Використовуйте gv $ session для RAC, якщо ви хочете отримати загальну кількість сеансів у кластері.



Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.