版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sayyy/article/details/81477311
前言
- 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中。具体方法网上搜索。