ORA-12516 “TNS监听程序找不到符合协议堆栈要求的可用处理程序” 解决方案


前言
 

简单描述一下场景,总共两台应用服务器,每台安装3个tomcat进行集群,并通过nginx做了负载均衡,今天在生产环境中部署项目后进行测试,发现在一台应用服务器中同样的代码,tomcat1和tomcat2正常,而访问tomcat3时报404错误,去看了下log发现是数据库服务器出了问题: 

然后登录到DB服务器去看看什么情况,结果登录时发现报以下错误: 

居然已经登录不上了,根本原因就是因为Oracle的process和session已经达到甚至超过最大值了,接下来就详细说明一下解决方案。

查看procress&session的参数值和占用值

上面提到由于超过连接最大值导致无法登录,所以用sys as dba也是登录不上的,首先需要先断开占用的procress,即停掉几个tomcat即可释放连接,接下来就可以登录了。在这里我停掉了所有tomcat,再通过sys用户登录sqlplus看一下procress和session的参数值和占用值: 

可以看到在没有任何在程序没有连接数据库的时候procress的占用值是18,而参数值为300,所有此时占用量很小,那么接下来分别启动应用服务器下的tomcat,依次看一下应用服务器1下的第1个tomcat,应用服务器1下的第2个tomcat和应用服务器1下的第3个tomcat之后,procress占用值的变化~ 
启动第1个tomcat后访问主页: 
 
启动第2个tomcat后访问主页: 
 
启动第3个tomcat后访问主页: 

不难发现每次process的值都增加了60,此时应用服务器1的tomcat已全部启动,那么也意味着应用服务器2的第二台tomcat启动后,process的值已超过300(198+120=318),所以当再启动应用服务器2的第3台tomcat时就无法登录了,所以我们仅需要修改process和session的最大值即可,修改语句如下:

 alter system set processes=1000 scope=spfile;
alter system set sessions=1105 scope=spfile;

注意一下processes的值和sessions的值,Oracle官方文档中要求:

sessions=processes*1.5+5

也就是说sessions的值是根据processes的值计算后得到的,这里需要注意一下,最后重启一下Oracle服务即可,此时再分别开启应用服务器2的3个tomcat并依次访问主页后再看一下process和session的参数值和占用值情况: 

如上图,可以看到process的值已经成功修改为1000,而此时开启了6个tomcat所占用的process值为378,session的占用值为375,都远远小于参数值,所以至此项目均已可以正常访问。

总结

简单记录一下这个Oracle异常的解决方案,希望对遇到同样问题的朋友有所帮助,The End。

转载:ORA-12516 “TNS监听程序找不到符合协议堆栈要求的可用处理程序” 解决方案的更多相关文章

  1. Oracle"TNS监听程序找不到符合协议堆栈要求的可用处理程序"解决方案

    问题描述:在使用ETL工具通过odbc方式连接Oracle进行数据抽取的过程中,Oracle 监听日志报错如下: 根本原因就是Oracle的process和session已经达到了甚至超过了最大值,解 ...

  2. Oracle几个基础配置问题:ORA-12154: TNS: 无法解析指定的连接标识符、ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务、ORA-12516 TNS监听程序找不到符合协议堆栈要求的可用处理程序

    问题1:ORA-12154: TNS: 无法解析指定的连接标识符 在一台服务器上部署了Oracle客户端,使用IP/SID的方式访问,老是报ORA-12154错误,而使用tnsnames访问却没有问题 ...

  3. ORA-12516 TNS监听程序找不到符合协议堆栈要求的可用处理程序

    服务器上某个数据库出现' ORA-12516: TNS: 监听程序找不到符合协议堆栈要求的可用处理程'错误,要解决该问题首先查看一下数据库现有的进程数,是否已经达到参数processes的大小. 使用 ...

  4. 【ORA-12516 TNS监听程序找不到符合协议堆栈要求的可用处理程序】

    服务器上某个数据库出现' ORA-12516: TNS: 监听程序找不到符合协议堆栈要求的可用处理程'错误,要解决该问题首先查看一下数据库现有的进程数,是否已经达到参数processes的大小. 取得 ...

  5. ORA-12516: TNS: 监听程序找不到符合协议堆栈要求的可用处理程”的异常

    简单说明:我们开发时多人开发,会频繁访问服务器数据库,结果当连接数大的时候,就会报ora-12516的错误,ORA-12516: TNS: 监听程序找不到符合协议堆栈要求的可用处理程"的异常 ...

  6. 记录一次 “ORA-12516:TNS:监听程序找不到符合协议堆栈要求的可用处理程序” 的处理过程

    一.今天同事反馈业务化运行的数据中心库发生了oracle无法连接的情况,导致所有业务系统无法正常运作的问题.报:“ORA-12516:TNS:监听程序找不到符合协议堆栈要求的可用处理程序” 二.收到这 ...

  7. PLSQL连接数据库报监听程序找不到符合协议堆

    服务器上某个数据库出现' ORA-12516: TNS: 监听程序找不到符合协议堆栈要求的可用处理程'错误,要解决该问题首先查看一下数据库现有的进程数,是否已经达到参数processes的大小   根 ...

  8. ORA-12504:tns:监听程序在 CONNECT_DATA中未获得SERVICE_NAME

    在VS2008中创建一个数据源时,提示以下错误 “ORA-12504:tns:监听程序在 CONNECT_DATA中未获得SERVICE_NAME” 本机安装ORACLE客户端,找出以下路径的文件D: ...

  9. (转)ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务 的解决方法

    早上同事用PL/SQL连接虚拟机中的Oracle数据库,发现又报了"ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务"错误,帮其解决后,发现很多人遇到过这样的问 ...

随机推荐

  1. 中文乱码之《字符编码:ASCII,Unicode 和 UTF-8》

    参考文献:字符编码笔记:ASCII,Unicode 和 UTF-8 一.ASCII 码 我们知道,计算机内部,所有信息最终都是一个二进制值.每一个二进制位(bit)有0和1两种状态,因此八个二进制位就 ...

  2. 谈谈你对this对象的理解

    理解: 1.this是js 的一个关键字,随着函数的使用场合的不同,this 的值会发生变化. 2.一个总原则:即this指的是调用函数的那个对象. 3.一般情况下,this 是全局对象,可以作为方法 ...

  3. location.origin不兼容IE8解决方案

    最近项目中遇到一个问题,在ajax跟后台交互时需要传一个全路径url.项目上线后,在谷歌,火狐,360等浏览器访问一切正常.但唯独IE8下出现问题,提示url:undefined ! 这就尴尬了!!! ...

  4. javaweb学习--jsp

    阅读电子书<Java Web从入门到精通>密码:461c,学习JavaWeb基础知识.由于本人已有html基础,所以直接略过前面部分,进入jsp学习 jsp页面添加库引用,引入项目文件 引 ...

  5. docker容器日志收集方案(方案N,其他中间件传输方案)

    由于docker虚拟化的特殊性导致日志收集方案的多样性和复杂性下面接收几个可能的方案 ​ 这个方案各大公司都在用只不过传输方式大同小异 中间件使用kafka是肯定的,kafka的积压与吞吐能力相当强悍 ...

  6. Collections方法的使用

    public static void main(String[] args) { // 0.给List排序 List<Integer> list = new ArrayList<In ...

  7. Python开发【内置模块篇】configparser

    生成配置文件 import configparser config = configparser.ConfigParser() config[', 'Compression': 'yes', ', ' ...

  8. tmpfs使用探讨

    一. 什么是tmpfs? tmpfs是一种基于内存的文件系统,它和虚拟磁盘ramdisk比较类似,但不完全相同,和ramdisk一样,tmpfs可以使用RAM,但它也可以使用swap分区来存储. 而且 ...

  9. 基于SVM的鸢尾花数据集分类实现[使用Matlab]

    iris数据集的中文名是安德森鸢尾花卉数据集,英文全称是Anderson’s Iris data set.iris包含150个样本,对应数据集的每行数据.每行数据包含每个样本的四个特征和样本的类别信息 ...

  10. apt-get 详解&&配置阿里源

    配置apt-get的下载源 1.复制原文件备份 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak 2.编辑源列表文件 sudo vim / ...