【问题标题】:How to check the maximum number of allowed connections to an Oracle database?如何检查允许连接到 Oracle 数据库的最大数量?
【发布时间】:2010-09-14 19:18:28
【问题描述】:

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

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

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

    数据库配置允许的会话数

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

    当前活跃的会话数

    SELECT COUNT(*)
      FROM v$session
    

    不过,正如我所说,在数据库级别和操作系统级别,以及是否已配置共享服务器,都存在其他潜在限制。如果共享服务器被忽略,您可能会在达到 SESSIONS 参数的限制之前达到 PROCESSES 参数的限制。而且您可能会遇到操作系统限制,因为每个会话都需要一定数量的 RAM。

    【讨论】:

    • 抱歉,我们如何运行这个查询?我收到“SELECT COUNT(*) FROM v$session”的“表或视图不存在”
    • @yin03 - 这意味着您使用的任何 Oracle 用户都没有 v$session 视图的权限。您需要让您的 DBA 授予您该权限。最有可能的是,尽管select_catalog_role 角色或仅对该对象的直接授权也可以工作,但您需要select any dictionary 特权。
    • ORA-00942: "表或视图不存在"
    • @pdem - 正如我之前的评论所提到的,这意味着您无权访问这些视图,需要请求 DBA 将它们授予您。
    【解决方案2】:

    sessions 参数派生自 processes 参数,并在您更改最大进程数时相应更改。请参阅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 ------------- -------- --------------- --- -------- 处理 96 309 500 会议 104 323 792

    【讨论】:

      【解决方案3】:

      我认为这会起作用,基于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'
      

      【讨论】:

      • 对不起,我们如何运行这个查询?我收到“SELECT COUNT(*) FROM v$session”的“表或视图不存在”
      • @yin03 您使用的是 Oracle 还是其他类型的数据库?如果是 Oracle,可能是权限问题。
      • 完美查询@JosephStyons!
      • @guarav,很高兴你发现它有用!
      【解决方案4】:

      注意:这只回答了部分问题。

      如果你只是想知道允许的最大会话数,那么你可以在sqlplus中执行,as 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 参数是你想要的。

      【讨论】:

        【解决方案5】:

        如果您想获取整个集群的会话总数,请为 RAC 使用 gv$session。

        【讨论】:

          【解决方案6】:

          v$resource_limit 视图对我来说非常有趣,以便浏览 oracle 会话、进程..:

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

          【讨论】:

            【解决方案7】:
            select count(*),sum(decode(status, 'ACTIVE',1,0)) from v$session where type= 'USER'
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2020-07-01
              • 1970-01-01
              • 1970-01-01
              • 2010-09-10
              • 1970-01-01
              • 1970-01-01
              • 2019-04-17
              • 1970-01-01
              相关资源
              最近更新 更多