首页 > 学院 > 开发设计 > 正文

ORA-12537: TNS:connection closed

2019-11-08 20:35:26
字体:
来源:转载
供稿:网友

环境:Oracle linux 5.8 + Oracle 11g rac

问题描述:客户端PLSQL与服务器端SQLplus都无法连接数据库,报错ORA-12537:TNS:Connection closed

1.lsnrctl status正常,查看listener.log(当PLSQL连接错误时,listener.log会有TNS:12518的错误)

2.造成TNS:12518错误的原因可能是PRocesses和session值设置太小或者dispatcher使用率过高

1)使用PLSQL本地连接到Oracle,分别查看process进程数和session会话数

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

从上图中可以看出process进程数和session会话数都比预设最高值低很多,排除此原因

若需要修改process进程数和session会话数

a)  修改process值alter system set processes=1000 scope=spfile;   --将process值改为1000b)  修改session值alter system set sessions=1105 scope=spfile;    --将sessions值改为1105之后重启数据库生效

2)当前dispatcher个数不够,dispatcher使用率过高

select name,busy,status,accept,idle from v$dispatcher;  --查看当前dispatchers个数和部分信息。一般默认安装的库只有一个。select name,(busy/(busy+idle))*100 "busy rate%" from v$dispatcher; --查看dispatchers使用率

从上图中可以看出dispatcher使用率为0,排除此原因

若需要修改dipacther个数

alter system set dispatchers='(protocol=tcp)(dispatchers=3)(service=youroracleservicenameXDB)';		--修改dispatchers个数为3.之后重启数据库

3.重启系统

不符合上述几种情形后,决定重启系统(暂时没有生产数据,不会对业务产生影响),但是重启系统之后再次尝试,问题依旧存在

shutdown -g0 -y -i6

4.重新安装数据库

未解决问题

5.本次故障的真正原因--oracle文件的执行权限意外变更

找到服务器上$ORACLE_HOME/bin下的oracle文件的权限

再次使用客户端PLSQL和服务器端sqlplus连接数据库,可以成功连接,问题解决!

进一步分析:由于oracle派生进程需要用到可执行文件oracle,所以该文件权限被意外修改之后派生进程会出现异常,因为监听派生进程本质上会调用到$ORACLE_HOME/bin/oracle可执行文件派生。

6.总结

一般监听发生问题不外乎检查如下几项:

1)/etc/hosts及域名解析配置文件

2)监听日志大小

3)监听状态

4)$ORACLE_HOME/bin下oracle可执行文件权限

本文参考链接:

http://blog.itpub.net/28380626/viewspace-754428/

http://blog.csdn.net/zhouxinhong/article/details/7396910


上一篇:Centos与mysql

下一篇:Oracle_数据处理

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表