如何检查允许连接到Oracle数据库的最大数量?

Nik*_*son 82 sql oracle

使用SQL检查Oracle数据库允许的最大连接数的最佳方法是什么?最后,我想显示当前的会话数和允许的总数,例如"目前,使用了80个连接中的23个".

Jus*_*ave 115

在确定Oracle数据库支持的连接数时,可能会有一些不同的限制.最简单的方法是使用SESSIONS参数和V $ SESSION,即

数据库配置为允许的会话数

SELECT name, value 
  FROM v$parameter
 WHERE name = 'sessions'
Run Code Online (Sandbox Code Playgroud)

当前活动的会话数

SELECT COUNT(*)
  FROM v$session
Run Code Online (Sandbox Code Playgroud)

正如我所说,在数据库级别和操作系统级别还有其他潜在限制,具体取决于是否已配置共享服务器.如果忽略共享服务器,则在达到SESSIONS参数的限制之前,您可能会达到PROCESSES参数的限制.并且您可能会达到操作系统限制,因为每个会话都需要一定量的RAM.

  • @ yin03 - 这意味着您使用的任何Oracle用户都没有"v $ session"视图的权限.您需要让您的DBA授予您该特权.最有可能的是,你需要`select any dictionary`特权,虽然`select_catalog_role`角色或者只是那个对象的直接授权也可以. (3认同)

Jos*_*ons 32

基于这个来源,我认为这会有效.

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
Run Code Online (Sandbox Code Playgroud)

然而,Justin Cave是对的.此查询提供了更好的结果:

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'
Run Code Online (Sandbox Code Playgroud)

  • @ yin03您使用的是Oracle还是其他类型的数据库?如果是Oracle,则可能是权限问题. (2认同)

Fue*_*ePi 29

会话参数从衍生过程,当你改变最大进程数参数,并相应地改变.有关详细信息,请参阅Oracle文档.

仅获取有关会话的信息:

    select current_utilization, limit_value 
    from v$resource_limit 
    where resource_name='sessions';
Run Code Online (Sandbox Code Playgroud)
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');
Run Code Online (Sandbox Code Playgroud)
RESOURCE_NAME CURRENT_UTILIZATION MAX_UTILIZATION LIMIT_VALUE
------------- ------------------- --------------- -----------
processes                      96             309         500
sessions                      104             323         792


bot*_*kop 5

注意:这仅回答了问题的一部分。

如果只想知道允许的最大会话数,那么可以在sqlplus中执行,作为sysdba:

SQL> show parameter sessions
Run Code Online (Sandbox Code Playgroud)

这为您提供了如下输出:

    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
Run Code Online (Sandbox Code Playgroud)

session 参数就是你想要的。