使用SQL检查Oracle数据库允许的最大连接数的最佳方法是什么?最后,我想显示当前的会话数和允许的总数,例如“当前使用80个连接中的23个”。
使用SQL检查Oracle数据库允许的最大连接数的最佳方法是什么?最后,我想显示当前的会话数和允许的总数,例如“当前使用80个连接中的23个”。
Answers:
确定Oracle数据库支持的连接数时可能会有一些不同的限制。最简单的方法是使用SESSIONS参数和V $ SESSION,即
数据库配置为允许的会话数
SELECT name, value
FROM v$parameter
WHERE name = 'sessions'
当前活动的会话数
SELECT COUNT(*)
FROM v$session
但是,正如我所说,在数据库级别和操作系统级别,以及是否已配置共享服务器,都存在其他潜在限制。如果忽略共享服务器,则在达到SESSIONS参数的限制之前,您很可能会达到PROCESSES参数的限制。您可能会遇到操作系统限制,因为每个会话都需要一定数量的RAM。
v$session
视图的特权。您需要要求DBA授予您该特权。最有可能的是,您希望获得select any dictionary
特权,尽管select_catalog_role
对该对象的角色或直接授予也可以。
该会话参数从推导过程参数,当你改变最大进程数随之改变。有关更多信息,请参见Oracle文档。
仅获取有关会话的信息:
select current_utilization, limit_value
from v$resource_limit
where resource_name='sessions';
CURRENT_UTILIZATION LIMIT_VALUE ------------------- ----------- 110792
尝试显示两者的信息:
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 ------------- ------------------- ---------------- -------- 加工96309500 届会104323792
根据此消息,我认为这会起作用。
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
但是,贾斯汀·凯夫(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'
注意:这只能回答部分问题。
如果只想知道允许的最大会话数,则可以在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参数是您想要的参数。
v $ resource_limit视图对我来说非常有趣,以便浏览oracle会话,进程..:
https://bbdd-error.blogspot.com.es/2017/09/check-sessions-and-processes-limit-in.html
select count(*),sum(decode(status, 'ACTIVE',1,0)) from v$session where type= 'USER'