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

本文介绍了解决Oracle数据库中ORA-12516错误的方法,该错误通常由连接数过多引起。文章提供了调整数据库连接限制的具体步骤,并展示了如何通过增加processes和sessions参数来解决此问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

 

注意:process和session设置的大小有比例  

请参考文章设置: http://www.cnblogs.com/summary-2017/p/7248397.html

 

一般ORA-12516有两个原因,一个是session数不够,再有一个就是客户端和服务端建立连接的时候不稳定所引起的。

以sysdba身份登陆PL/SQL 或者 Worksheet

1.查看进程数和会话数

select count(*) from v$process;                         取得数据库目前的进程数。
select value from v$parameter where name = 'processes'; 取得进程数的上限。

select count(*) from v$session;

1.1看配置的进程数和会话数:

show parameter processes;

show parameter sessions;

2.修改processes和sessions值
SQL> alter system set processes=300 scope=spfile;
系统已更改。
SQL> alter system set sessions=335 scope=spfile;
系统已更改。

 

3、查看processes和sessions参数,www.linuxidc.com但更改并未生效

SQL> show parameter processes
NAME                                 TYPE        VALUE 
db_writer_processes                  integer     1
gcs_server_processes                 integer     0
job_queue_processes                  integer     10
log_archive_max_processes            integer     2
processes                            integer     50
SQL> show parameter sessions
NAME                                 TYPE        VALUE
license_max_sessions                 integer     0
license_sessions_warning             integer     0
logmnr_max_persistent_sessions       integer     1
sessions                             integer     60
shared_server_sessions               integer
 4、重启数据库,使更改生效

SQL> shutdown
SQL> startup
SQL> show parameter processes
NAME                                 TYPE        VALUE
db_writer_processes                  integer     1
gcs_server_processes                 integer     0
job_queue_processes                  integer     10
log_archive_max_processes            integer     2
processes                            integer     300
SQL> show parameter sessions
NAME                                 TYPE        VALUE
java_soft_sessionspace_limit         integer     0
license_max_sessions                 integer     0
license_sessions_warning             integer     0
logmnr_max_persistent_sessions       integer     1
sessions                             integer     335
shared_server_sessions               integer

 

********************************************************************************************************************************************************

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

[日期:2016-09-27]来源:Linux社区  作者:wlwlwlwl015[字体:大 中 小]

前言

简单描述一下场景,总共两台应用服务器,每台安装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;

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

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

总结

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

更多Oracle相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12

本文永久更新链接地址http://www.linuxidc.com/Linux/2016-09/135546.htm

linux

查阅资源原文:http://blog.youkuaiyun.com/superhoy/article/details/38613225

查阅资源原文:http://www.linuxidc.com/Linux/2016-09/135546.htm

 

版权声明,转载请注明出处:http://www.cnblogs.com/summary-2017/p/7248313.html

转载于:https://www.cnblogs.com/summary-2017/p/7248313.html

### 解析ORA-12541: TNS:监听程序错误 当客户端尝试连接到Oracle数据库并收到`ORA-12541: TNS: no listener` 错误时,表明客户端无法到或访问TNS监听器[^1]。 #### 修改Listener.ora文件配置 为了使Navicat能够成功连接至远Oracle服务器,需确认`listener.ora` 文件中的主机地址设置正确。具体操作如下: 确保`listener.ora` 中的 `HOST` 参数指向实际运行着监听的IP地址而非默认的`localhost` 。例如,在一台具有 IP 地址为 `192.168.111.133` 的机器上应这样定义监听者描述符: ```plaintext LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.111.133)(PORT = 1521)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) ) ) ``` 此更改使得监听服务绑定到了指定网卡接口而不是仅限于回环设备[^3]。 #### 验证TCP端口状态 使用命令行工具验证目标计算机上的1521端口是否处于开放且可被外部访问的状态非常重要。如果该端口未打开,则即使其他一切配置都正确也无法建立正常通信链路。可以利用类似tcping这样的第三方软件来测试端口连通性。 #### 设置SQLNet参数 编辑位于 `$ORACLE_HOME/network/admin/sqlnet.ora` 下面的 SQL*Net 配置文件,加入下面这行以禁用不必要的认证方式从而简化连接流: ```ini SQLNET.AUTHENTICATION_SERVICES= (NONE) ``` 上述调整有助于排除因安全策略引起的潜在障碍[^4]。 #### 客户端侧配置 在Navicat内创建新的连接时,请务必准确输入对应的“网络服务名称”。通常情况下这就是实例名或者是通过tnsnames.ora预先设定好的别名。对于初次使用者来说,建议先不勾选额外的服务命名选项以免引入复杂度[^5]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值