查看oracle连接数的消耗情况

前言

  • oracle 12c
  • linux 7.0
  • PL/SQL 11.0.2
  • oracle中的连接数量是有限的。如果有程序一直消耗连接数量,则连接数量就会耗尽。

数据库允许的最大连接数

select value from v$parameter where name ='processes';

查看当前的数据库连接数

select count(*) from v$process ;

查看连接消耗情况

默认情况下,oracle记录了机器名(hostname),而没有记录ip。所以,只能知道每个机器消耗了多少连接(弊端:如果hostname重名时,视作一台机器)。

查询:客户端设备标识、客户端程序、oracle用户名、消耗的连接数量

select  b.MACHINE, b.PROGRAM, b.USERNAME, count(*) from v$process a, v$session b 
where a.ADDR = b.PADDR and  b.USERNAME is not null   
group by  b.MACHINE, b.PROGRAM, b.USERNAME 
order by count(*) desc

执行上面查询,得到如下结果:

MACHINE PROGRAM USERNAME COUNT(*)
1 MACHINE NAME 1 JDBC Thin Client USERNAME1 904
2 MACHINE NAME 1 JDBC Thin Client USERNAME2 60
3 MACHINE NAME 1 JDBC Thin Client USERNAME3 55
4 CentOS7-Oracle oracle@CentOS7-Oracle USERNAME1 18
5 MACHINE NAME 2 JDBC Thin Client USERNAME4 10
8 WORKGROUP\DESKTOP-59RQDEQ plsqldev.exe USERNAME1 4
9 WorkGroup\ADMINI plsqldev.exe USERNAME1 4
11 MACHINE NAME 3 oraagent.bin@jsfwdb1 (TNS V1-V3) USERNAME5 2
  • MACHINE列:机器名。windows,计算机名。linux,hostname。
  • PROGRAM列:程序名。JDBC Thin Client是oracle jdbc驱动。plsqldev.exe是PL/SQL。
  • USERNAME列:oracle用户名。jdbc程序连接时使用的oracle用户名。

其它

  • 每台设备的名称必须唯一,否则,无法确切的知道连接来自哪台设备。
  • 尽量为每个应用提供一个账户名(酌情处理,账户名多了,也是不好维护的)。同一台设备上,有多个应用时,可以通过帐户名区分。
  • oracle默认没有在session中记录ip。但是可以通过trigger将ip记录到session中。具体方法网上搜索。

你可能感兴趣的:(oracle)