故障简介

今天一个应用运维同事微信联系我,说有一个应用日志,显示连接Oracle数据库报错,我问了一下是什么应用,对方回答是报表应用,这下心里有谱了。
第一:报表应用重要性不高
第二:一般这种情况,都是因为程序写的烂,一堆慢sql语句,将连接数占满了,导致获取不到连接数。

日志分析

于是让应用运维同事,将应用报错日志发给我先看看,报错信息如下所示

java.sql.SQLException: Listener refused the connection with the following error:
ORA-12519, TNS:no appropriate service handler foundat oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:458) ~[ojdbc6-11.2.0.3.jar:11.2.0.3.0]at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:546) ~[ojdbc6-11.2.0.3.jar:11.2.0.3.0]at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:236) ~[ojdbc6-11.2.0.3.jar:11.2.0.3.0]at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32) ~[ojdbc6-11.2.0.3.jar:11.2.0.3.0]at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:521) ~[ojdbc6-11.2.0.3.jar:11.2.0.3.0]at java.sql.DriverManager.getConnection(DriverManager.java:582) ~[na:1.6.0_45]at java.sql.DriverManager.getConnection(DriverManager.java:185) ~[na:1.6.0_45]at com.umpay.jdbc.PooledConnection.makeRealConnection(PooledConnection.java:133) ~[jsv2core-1.2.27.jar:na]at com.umpay.jdbc.PooledConnection.<init>(PooledConnection.java:118) ~[jsv2core-1.2.27.jar:na]at com.umpay.jdbc.UmpayCP.getConnection(UmpayCP.java:307) ~[jsv2core-1.2.27.jar:na]at com.umpay.jdbc.ConnectionFactory.getConnection(ConnectionFactory.java:125) ~[jsv2core-1.2.27.jar:na]at com.umpay.jdbc.ConnectionFactory.getConnection(ConnectionFactory.java:113) ~[jsv2core-1.2.27.jar:na]at com.umpay.backofc2.collate.CollateInfo.getNearest10Collates(CollateInfo.java:257) ~[collate-frame-20160908-mysql.jar:na]at com.umpay.backofc2.collate.CollateMain.startup(CollateMain.java:187) [collate-frame-20160908-mysql.jar:na]at com.umpay.backofc2.collate.CollateMain.main(CollateMain.java:310) [collate-frame-20160908-mysql.jar:na]
Caused by: oracle.net.ns.NetException: Listener refused the connection with the following error:
ORA-12519, TNS:no appropriate service handler found

我看了一下报错,竟然不是常见的无法获取连接数报错,就上网查询了一下ora-12519错误代码的含义,竟然是应用的连接数达到数据库连接数的上限了。

于是让应用同事把连接数据库的JDBC连接池配置文件发给我看看。

########################################################
jdbc.driver = oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:@XXXX:1521:XXX
########################################################
jdbc.username= XXX
jdbc.password= XXX
jdbc.dbType=oracle
########################################################
jdbc.min_connections = 10
jdbc.max_connections = 100

什么鬼,最大连接数竟然设置成100个。

解决过程

先看看Oracle数据库的连接数上限

SQL> show parameter process; NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
aq_tm_processes                      integer     0
cell_offload_processing              boolean     TRUE
db_writer_processes                  integer     2
gcs_server_processes                 integer     0
global_txn_processes                 integer     1
job_queue_processes                  integer     1000
log_archive_max_processes            integer     4
processes                            integer     150

上限是150,启动几个应用,连接数很快就会被占用完,这个上限需要调整一下。

参数调整

修改最大连接数:

alter system set processes = 500 scope = spfile;

重启数据库:

shutdown immediate;
startup;SQL> show parameter process; NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
aq_tm_processes                      integer     0
cell_offload_processing              boolean     TRUE
db_writer_processes                  integer     2
gcs_server_processes                 integer     0
global_txn_processes                 integer     1
job_queue_processes                  integer     1000
log_archive_max_processes            integer     4
processes                            integer     500

这里需要注意,调整连接上限,需要重启实例,如果不是很重要的数据库,修改完成参数,就可以立刻重启,如果是重要数据库,需要协调窗口时间重启。

建议

在这里有3个建议
第一:数据库连接上限,可以根据业务需求进行调整,例如不太繁忙的系统,可以调整为500,繁忙的系统,可以调整为1000。如果要调整更高的上限,可以考虑进行垂直拆分业务了。
第二:应用连接数据数,一定要按需设置,有条件,可以弄一个连接数据管理的配置中心,由数据库人员管理连接数。
第三:定期优化线上慢sql,降低应用对连接数的需求。

分享一次生产应用无法连接Oracle数据库故障
https://mp.weixin.qq.com/s/LNAr463OMYTxOobDyVh9Wg

分享一次生产应用无法连接Oracle数据库故障相关推荐

  1. cmd oracle 连接实例_cmd怎么连接oracle数据库

    Oracle中使用数据库的最高权限 我们知道,Oracle数据库中有比如SYSTEM这类用户,但它不是最高权限,有些操作无法进行.会出现权限不足的提示. 那么我们怎么利用最高权限登录呢? 方法一 ①打 ...

  2. python连接oracle数据库的方法_Python3.6连接Oracle数据库的方法详解

    本文实例讲述了Python3.6连接Oracle数据库的方法.分享给大家供大家参考,具体如下: 下载cx_Oracle模块模块: https://pypi.python.org/pypi/cx_Ora ...

  3. java对Oracle数据库查询_java 连接Oracle数据库 查询

    java 连接Oracle数据库 查询 (2014-03-03 16:07:15) 标签: it 在ADF要先引入jar包 Oracle JDBC ;不然加载驱动不会成功. public static ...

  4. oracle数据库连接时报12514_连接Oracle数据库时报ORA-12541:TNS:无监听程序的图文解决教程...

    在用PL/SQL Developer等客户端工具连接oracle服务器时出现ORA-12541:TNS:无监听程序的错误,如下图: 发现原来是oracle的监听没有启动,重启监听后就连接成功了,下面跟 ...

  5. python连接oracle数据库_深入理解Python3.6连接Oracle数据库

    Python3.6连接Oracle数据库的方法详解 本文实例讲述了Python3.6连接Oracle数据库的方法.分享给大家供大家参考,具体如下: 下载cx_Oracle模块模块: https://p ...

  6. oracle vba 数组_Excel VBA 连接各种数据库(二) VBA连接Oracle数据库

    (2019.08.02更新)本文内容在Windows10 企业版64bit下测试通过 本文主要内容: Oracle环境配置 ODBC驱动设置.第三方驱动下载 VBA连接Oracle连接方法 Oracl ...

  7. python读取oracle数据库中文乱码_PL/SQL连接Oracle数据库,中文乱码,显示问号

    PL/SQL连接oracle数据库 1.简单介绍 在不安装oracle数据库的情况下使用pl/sql连接远程oracle数据库. 2.详细步骤: a)      安装PL/SQL.依据自己的操作系统安 ...

  8. win7 64位系统 PB连接oracle数据库出现问题的解决方法

    今天与大家分享一个自己的学习笔记,希望能给遇到同样问题的人带来帮助. 不知道大家在win7 64位系统下用 PB连接oracle数据库时,是否遇到过"oracle library oci.d ...

  9. python cx oracle 11g,怎么在python中使用cx_Oracle模块连接Oracle数据库

    怎么在python中使用cx_Oracle模块连接Oracle数据库 发布时间:2021-03-29 18:08:05 来源:亿速云 阅读:65 作者:Leah 怎么在python中使用cx_Orac ...

最新文章

  1. java 线程池 分组_JAVA面试题解惑系列(十)——话说多线程
  2. Scrum立会报告+燃尽图(十二月六日总第三十七次):程序功能逻辑优化
  3. 科学家提出了忆阻性神经混合芯片 这一概念
  4. 【Python】函数调用外部变量
  5. pku 3159 Candies 差分约束
  6. centos7python命令_详解Linux Centos7下安装Python的方法
  7. 学完计算机还是不懂,如果看了这篇文章你还不懂傅里叶变换,那就过来掐死我吧...
  8. 贷款承诺(Loan Commitment)
  9. for循环中一个不容小觑的问题
  10. [翻译] 使用 Serverless 和 .NET Core 构建飞速发展的架构
  11. 机器学习西瓜书各章详细目录定位
  12. 使用nagios监控io,内存
  13. 动态创建form传参
  14. Python中的进程和线程
  15. API 安全最佳实践,不要等出事后“捶胸顿足”
  16. eclipse 打包 apk 文件
  17. 推荐一些不错的公众号【三】
  18. idea+java+mysql+SQLyog安装教程
  19. 计算机考研408专用笔记-----计算机组成原理
  20. 2022年PYTHON应用行业,PYTHON就业方向

热门文章

  1. 推荐系统组队学习——协同过滤
  2. 《用python写网络爬虫》完整版+源码
  3. php 低级语句,低级语言是什么?
  4. php错误日志分析_php错误日志
  5. 密度图的密度估计_R-ggridges包:山峰叠峦图
  6. python牛顿法求方程的根_Python 求多重根的方法
  7. nodejs安装不好_nodejs安装过程中环境变量配置的问题
  8. c语言从入门到精通_C语言基本概念(上)【C语言入门到精通】
  9. Singleton in java
  10. Python开源微博工具:Twitter