ORA-12516: TNS: 监听程序无法找到匹配协议栈的可用句柄

ORA-12516: TNS: 监听程序无法找到匹配协议栈的可用句柄



使用PL/SQL Developer 数据库远程客户端连接程序连接数据库:

错误信息:

ORA-12516: TNS: 监听程序无法找到匹配协议栈的可用句柄.

TNS-12516 TNS:listener could not find available handlerwith matching protocol stack

 

导致原因可能为:

1.一般是由于数据库的当前会话数不满足造成的,相关的参数有两个:processes和sessions

(1)首先查看当前这两个参数的值

sql>conn / as sysdba

sql>select count(*) from v$session;  从这里可以看出当前的session数

sql>show parameter processes;    从输出的信息可以看到当前数据库中参数processes的值

sql>show parameter sessions;     从输出的信息可以看到当前数据库中参数sessions的值

这二者的关系是:sessions=(1.1*processes+5)

(2)修改这两个参数

alter system set processes=300 scope=spfile;

alter system set sessions=335 scope=spfile;

(3)重新启动数据库服务,使这两个参数生效。

(4)如果数据库服务无法正常启动,则可能是solaris10系统参数seminfo_semmns设置的偏小,因为每个process会占用一个semmns,semmns调整后需要重新启动操作系统。

semmns的计算公式为:  SEMMNS>processes+instance_processes+system

processes=数据库参数processes的值  instance_processes=5(smon,pmon,dbwr,lgwr,arch)

 

2.可能是tnsnames.ora文件中的配置的 "SERVICE_NAME ="和 对应值(数据库名称) 中间多了个空格,需要去掉 之间的空格,好像有没有空格没有影响,已验证(可能有时候是这样引发ORA-12516)

 

3.如果做以上操作仍无法排除ORA-12516,需要做最后尝试 :单独重启启动 databasenameSeverice (databasename:是要连接目标数据库而引发ORA-12516 错误的目标数据库名称)

已尝试:有效

 

(4) listener.log日志太大引发的,listener.log日志记录了通过listener处理的网络请求信息,它包含客户端请求的时间,连接方式(专用或共享),连接程序,网络协议,主机名,网络端口号等信息,listener.log的文件内容没有太大意义,可以不让listener写日志。

 操作时:#在listener.ora文件最后加入一行: logging_listener=off


ORA-12516:TNS:listener could not find availablehandler with matching protocol stack


应用程序连接测试数据库时报ORA-12516TNS:listener could not findavailable handler with matching protocol stack

检查监听日志文件,发现大量的TNS-12516错误

cd/u01/app/oracle/product/10.2.0/db_1/network/log

morelistener.log

TNS-12516: TNS:listener could not find available handler with matching protocol stack
13-MAY-2014 14:49:35 * (CONNECT_DATA=(SERVICE_NAME=xxx)(CID=(PROGRAM=c:\windows\system32\inetsrv\w3wp.exe)(HOST=GET08C0058)(USER=SYSTEM))) * (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.xxx.xxx)(PORT=4594)) * establish * xxx * 12516


登录数据库,检查参数session时,出现ORA-01012not logged on

[oraescm@lnxtest ~]$ sqlplus / as sysdba
 
SQL*Plus: Release 10.2.0.4.0 - Production on Tue May 13 14:29:57 2014
 
Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.
 
Connected.
SQL> show parametersession;
 
ERROR at line 1:
ORA-01012: not logged on
 

治标治本的解决办法是修改processes参数值,但是此时数据库连接不上。可以通过下面方法解决:

1停止监听服务,等数据库访问连接数下降用户再登录。 
        lsnrctl stop

2: sqlplus"/ as sysdba" 登陆后,修改processes值。


由于是测试数据库,可以折腾一下,如果不想修改processes的值,可以通过下面临时解决方法解决问题

1:重启监听服务

lsnrctlreload

2: sqlplus "/ as sysdba" 登陆后
       shutdonwn abort

         startup

3: ps-ef|grep ora_dbw0_$Oracle_SID

  kill -9 pid

  startup --重启数据库

参考资料:

http://blog.csdn.net/kellyseeme/article/details/8935208
         http://blog.csdn.net/dingli312/article/details/11394753
  http://blog.csdn.net/newhappy2008/article/details/6557662

作者:潇湘隐者

出处:http://www.cnblogs.com/kerrycode/


本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接.

 

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值