Oracle连接满了,无法登录数据库,如何分析连接来源?

问题现象:

收到数据库连接数使用率高的告警:

复制
[ID:xxx][CJC测试系统:XXX][数据库],连接数使用率偏高,the current value is 95.58 %[CJC],故障发生时间:2025-02-28 xx:xx:xx1.

尝试登录数据库:

复制
cjc-db-01# sqlplus / as sysdba SQL> select * from v$resource_limit; select * from v$resource_limit * ERROR at line 1: ORA-01012: not logged on Process ID: 0 Session ID: 0 Serial number: 0 SQL> select status from v$instance; select status from v$instance * ERROR at line 1: ORA-01012: not logged on Process ID: 0 Session ID: 0 Serial number: 01.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.

告警日志如下:

复制
Process W004 submission failed with error = 20 ORA-00020: maximum number of processes (430) exceeded ORA-20 errors will not be written to the alert log for the next minute. Please look at trace files to see all the ORA-20 errors.1.2.3.4.5.

问题分析:

临时解决方案 重启应用 或 重启数据库释放连接,但是如果不定位到连接来源,重启后问题仍有可能发生。

数据库服务器,查看连接来源,可以通过netstat或监听日志查看,本次通过netstat进行查看:

复制
netstat -ano | grep 1521 > 0228.log more 0228.log cat 0228.log|wc -l 445 cat 0228.log | grep 192.168.0.101|wc -l 3941.2.3.4.5.6.

可以看到,数据库连接来源主要是 192.168.0.101 。

继续查看 192.168.0.101 服务器上什么应用连接的数据库:

登录到这台服务器:

通过 netstat 命令检查,查看到是 pid=6666 的java程序在连接数据库。

复制
root@cjc-xx-02:#netstat -lanp|grep 1521|more tcp 0 0 192.168.0.101:**** 192.168.0.103:1521 ESTABLISHED 6666/java tcp 0 0 192.168.0.101:**** 192.168.0.103:1521 ESTABLISHED 6666/java tcp 0 0 192.168.0.101:**** 192.168.0.103:1521 ESTABLISHED 6666/java tcp 0 0 192.168.0.101:**** 192.168.0.103:1521 ESTABLISHED 6666/java ......1.2.3.4.5.6.

当前还有283个连接

复制
root@cjc-xx-02:#netstat -lanp|grep 1521|wc -l 2831.2.

查看对应的进程

复制
root@cjc-xx-02:#ps -ef|grep 6666 tomcat 6666 1 0 Feb24 ? 00:16:38 java -jar -Xms****M -Xmx****M xxxtestxxx.jar --spring.profiles.active=xxx1.2.

查找对应的文件

复制
root@cjc-xx-02:#find / -name xxxtestxxx.jar1.

解决方案:

通过服务器IP,进程名,文件名等可以精确定位到具体的应用,可以沟通临时停止或重启此应用,最后排查此应用连接不释放的问题。

阅读剩余
THE END