2008-10-02 82 views

回答

93

在確定Oracle數據庫支持的連接數時可能會發揮幾個不同的限制。最簡單的方法是使用會話參數和V $ SESSION,即

數據庫被配置爲允許

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

當前活動的會話數的會話數

SELECT COUNT(*) 
    FROM v$session 

正如我所說的,儘管如此,在數據庫級別和操作系統級別還有其他潛在的限制,並取決於是否配置了共享服務器。如果共享服務器被忽略,那麼在達到SESSIONS參數的限制之前,您可能會碰到PROCESSES參數的限制。而且您可能會遇到操作系統限制,因爲每個會話都需要一定量的RAM。

+0

對不起,我們該如何運行這個查詢?我收到「SELECT COUNT(*)FROM v $ session」的「table or view not exist」 – lorraine 2016-07-21 09:16:30

+3

@ yin03 - 這意味着您使用的任何Oracle用戶在`v $ session`視圖中都沒有權限。您需要請您的DBA授予您該特權。最有可能的是,你希望'選擇任何字典'特權,儘管'select_catalog_role'角色或者直接授予該對象也是可行的。 – 2016-07-21 17:30:52

27

我認爲這將工作,基於this source

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」的「表或視圖不存在」 – lorraine 2016-07-21 09:20:46

+1

@ yin03您使用Oracle或其他類型的數據庫嗎?如果是Oracle,它可能是一個權限問題。 – JosephStyons 2016-07-21 13:22:19

1
select count(*),sum(decode(status, 'ACTIVE',1,0)) from v$session where type= 'USER' 
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 

的會議參數是你想要的。

21

會議參數當你改變最大進程數從過程參數,並相應改變的。有關更多信息,請參閱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 
4

RAC使用GV $ session中,如果你想要獲得羣集中的會話總數。