http://www.vitalsofttech.com/ora-12537-tnsconnection-closed/

Question: When trying to establish a sqlplus connection to the database, I get the “ORA-12537: TNS:connection closed” error message. How do I resolve this?

      SQL> conn vst_server/xxx@node1
      ERROR:
    ORA-12537: TNS connection closed

In the listener log I see this message.

      TNS-12518: TNS:listener could not hand off client connection
      TNS-12560: TNS:protocol adapter error
      TNS-00517: Lost contact
      TNS-12547: TNS:lost contact

Answer: According to the oerr utility the ORA error could be due to:

      12537, 00000, “TNS:connection closed”
    “End of file” condition has been reached; partner has disconnected.

This error could be due to a multiple of reasons.

Reason 1
In a RAC environment for a database which was migrated to a RAC instance, the REMOTE_LISTENER is incorrectly set.

During failover of a service which is configured to use TAF, the connections connected to this service will hang. After the timeout you will get the ORA-12537 error before disconnection.

You will also find more details in the SCAN listener log.

To verify and correct this, first find the RAC cluster name.

      dbtest>cemutlo -n
    db1-clust

Then verify the REMOTE_LISTENER value in the Database.

      sqlplus> show parameter REMOTE_LISTENER
    dbtest:1521

Here the REMOTE_LISTENER is incorrectly set to the hostname instead of the cluster name. Correct this value to use the cluster SCAN name.

    alter system set REMOTE_LISTENER=’db1-clust:1521′ scope=both sid=dbtest1′;

The session should now failover without disconnecting.

Reason 2
If the VIP name is being used for the LOCAL_LISTENER then the Fully Qualified Network Name (FQDN) should be used. Alternatively the VIP IP can be used instead. See Oracle Metalink Doc ID 970619.1

      SQL> alter system set local_listener='(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=dbtest.vst.com)(PORT=1521))))’ service_name=’EQ2′;

or

SQL> alter system set local_listener='(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=111.21.32.12)(PORT=1521))))’ service_name=’EQ2′;

Reason 3
The Listener process can’t access Oracle binaries in the Database home. The Grid home is installed as a different user than the owner of the Oracle Database binaries. You may find more details in the SCAN listener log for this issue as well.

As the owner of the listener process verify that Oracle Database Binary home can be accessed from the listener home.

    ls -l $ORACLE_HOME/bin/oracle

Reason 4
If the home was cloned or moved at the OS level the Oracle Home binaries need to be relinked.

http://feed.askmaclean.com/archives/ora-12537-tnsconnection-closed.html

[oravisR1213@prcsgiapp1 VISR1213_prcsgiapp1]$ sqlplus apps/apps@VISR1213

SQL*Plus: Release 11.1.0.7.0 - Production on Wed Jan 4 11:53:00 2017

Copyright (c) 1982, 2008, Oracle. All rights reserved.

ERROR:
ORA-12537: TNS:connection closed

Enter user-name:
ERROR:
ORA-01017: invalid username/password; logon denied

listener.log的日志如下:

24-JUN-2013 06:21:24 * (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=lunar)(CID=(PROGRAM=sqlplus)(HOST=lunar1)(USER=oracle))) * (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.56.81)(PORT=48962)) * establish * lunar * 12518
TNS-12518: TNS:listener could not hand off client connection
TNS-12547: TNS:lost contact
TNS-12560: TNS:protocol adapter error
TNS-00517: Lost contact
Linux Error: 32: Broken pipe

这个报错,只解决上应该跟OS的什么配置有关系,但是不清楚哪里的配置问题。
正常的系统,使用strace跟踪,相关log如下:

。。。。。。。。。。。。。。。。。
16123 0.001337 open("/etc/hosts", O_RDONLY) = 10
16123 0.001629 fcntl(10, F_GETFD) = 0
16123 0.001044 fcntl(10, F_SETFD, FD_CLOEXEC) = 0
16123 0.001640 fstat(10, {st_mode=S_IFREG|0644, st_size=590, ...}) = 0
16123 0.000826 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f11f0d1c000
16123 0.001343 read(10, "# Do not remove the following li"..., 4096) = 590
16123 0.001433 close(10) = 0
16123 0.001342 munmap(0x7f11f0d1c000, 4096) = 0
16123 0.001008 open("/etc/hostid", O_RDONLY) = -1 ENOENT (No such file or directory)
16123 0.000998 uname({sys="Linux", node="lunar1", ...}) = 0
16123 0.001304 open("/etc/hosts", O_RDONLY) = 10
16123 0.004079 fcntl(10, F_GETFD) = 0
16123 0.000199 fcntl(10, F_SETFD, FD_CLOEXEC) = 0
16123 0.000167 fstat(10, {st_mode=S_IFREG|0644, st_size=590, ...}) = 0
16123 0.001394 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f11f0d1c000
16123 0.001537 read(10, "# Do not remove the following li"..., 4096) = 590
16123 0.001640 close(10) = 0
16123 0.001891 munmap(0x7f11f0d1c000, 4096) = 0
16123 0.001114 gettimeofday({1372028588, 2119}, NULL) = 0
16123 0.000792 write(9, "\3\214\0\0\6\0\0\0\0\0\3s\3\376\377\377\377\377\377\377\377\t\0\0\0!\1\0\0\376\377\377"..., 908) = 908
16123 0.003459 read(9, "\6\315\0\0\6\0\0\0\0\0\10&\0\23\0\0\0\23AUTH_VERSION_S"..., 8208) = 1741
16123 0.005878 open("/u01/app/oracle/product/11.2.0/db_1/rdbms/mesg/oraus.msb", O_RDONLY) = 10
16123 0.001656 fcntl(10, F_SETFD, FD_CLOEXEC) = 0
16123 0.001247 lseek(10, 0, SEEK_SET) = 0
16123 0.001266 read(10, "\25\23\"\1\23\3\t\t\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 256) = 256
16123 0.001189 lseek(10, 512, SEEK_SET) = 512
16123 0.001447 read(10, "l\31\3013\276J\213hv{\316\210\200\227S\3113\373\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512
16123 0.002147 lseek(10, 1024, SEEK_SET) = 1024
16123 0.001641 read(10, "\30\0$\0002\0;\0D\0Q\0[\0f\0o\0{\0\210\0\240\0\310\0\321\0\331\0\340\0"..., 512) = 512
16123 0.002218 lseek(10, 55808, SEEK_SET) = 55808
16123 0.000759 read(10, "\10\0e\5\0\0008\0f\5\0\0\232\0g\5\0\0\7\1w\5\0\0Z\1x\5\0\0o\1"..., 512) = 512
16123 0.002017 lseek(10, 512, SEEK_SET) = 512
16123 0.000381 read(10, "l\31\3013\276J\213hv{\316\210\200\227S\3113\373\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512
16123 0.001120 lseek(10, 1024, SEEK_SET) = 1024
16123 0.000799 read(10, "\30\0$\0002\0;\0D\0Q\0[\0f\0o\0{\0\210\0\240\0\310\0\321\0\331\0\340\0"..., 512) = 512
16123 0.001908 lseek(10, 56320, SEEK_SET) = 56320
。。。。。。。。。。。。。。。。。。

这个有问题的系统使用strace跟踪,相关log如下:

。。。。。。。。。。。。。。。。。。
11647 0.002544 open("/etc/hosts", O_RDONLY) = 9
11647 0.000358 fcntl(9, F_GETFD) = 0
11647 0.000122 fcntl(9, F_SETFD, FD_CLOEXEC) = 0
11647 0.000169 fstat(9, {st_mode=S_IFREG|0644, st_size=590, ...}) = 0
11647 0.000120 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f48f89b9000
11647 0.000157 read(9, "# Do not remove the following li"..., 4096) = 590
11647 0.000393 read(9, "", 4096) = 0
11647 0.000107 close(9) = 0
11647 0.000155 munmap(0x7f48f89b9000, 4096) = 0
11647 0.000178 open("/etc/hosts", O_RDONLY) = 9
11647 0.000129 fcntl(9, F_GETFD) = 0
11647 0.000559 fcntl(9, F_SETFD, FD_CLOEXEC) = 0
11647 0.000204 fstat(9, {st_mode=S_IFREG|0644, st_size=590, ...}) = 0
11647 0.001389 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f48f89b9000
11647 0.000577 read(9, "# Do not remove the following li"..., 4096) = 590
11647 0.000127 close(9) = 0
11647 0.000123 munmap(0x7f48f89b9000, 4096) = 0
11647 0.000300 lstat("/u01/app/oracle/diag/clients/user_oracle/host_918442181_80/alert/log.xml", {st_mode=S_IFREG|0640, st_size=132505, ...}) = 0
。。。。。。。。。。。。

上述较大的不同在于fcntl(9, F_GETFD)相关的内容,这个东西我也不懂,c语言都还给老师了…… :(

于是查询官方文档,根据MOS介绍,逐一核对文件权限:

检查oracle用户的权限:
1,grid的是正确的:

[grid@lunar1 trace]$ ls -l $ORACLE_HOME/bin/oracle
-rwsr-s--x 1 grid asmadmin 203973009 May 3 12:42 /u01/11.2.0/grid/bin/oracle
[grid@lunar1 trace]$

oracle的是错误的:

[oracle@lunar1 ~]$ ls -l $ORACLE_HOME/bin/oracle
-rwxr-s--x 1 oracle asmadmin 232399431 May 3 15:11 /u01/app/oracle/product/11.2.0/db_1/bin/oracle
[oracle@lunar1 ~]$

使用root修改

[root@lunar1 ~]# chmod 6751 /u01/app/oracle/product/11.2.0/db_1/bin/oracle
[root@lunar1 ~]#

再次检查已经正确了:

[oracle@lunar1 ~]$ ls -l $ORACLE_HOME/bin/oracle
-rwsr-s--x 1 oracle asmadmin 232399431 May 3 15:11 /u01/app/oracle/product/11.2.0/db_1/bin/oracle
[oracle@lunar1 ~]$

2,oracle用户的ORACLE_HOME所在文件系统不支持setuid/suid( 也不支持 nosetuid/nosuid 设置),例如:

mount| grep <mount_point_of_ORACLE_HOME>
/home/oracle on /dev/dsk/diskoracle read/write/nosuid..

我这里正常的:

[oracle@lunar1 ~]$ mount| grep /u01
/dev/sdb1 on /u01 type ext3 (rw)
[oracle@lunar1 ~]$

再次测试还是连接不上:

SQL> conn sys/oracle@lunar as sysdba
ERROR:
ORA-12537: TNS:connection closed Warning: You are no longer connected to ORACLE.
SQL>

3,检查oracle用户的$ORACLE_HOME应该为755(注意,不要带 -R !!!):

[oracle@lunar1 ~]$ chmod 755 $ORACLE_HOME
[oracle@lunar1 ~]$

这次可以了:

SQL> conn sys/oracle@lunar as sysdba
Connected.
SQL>

把节点2也修改了:

[oracle@RAC2 ~]$ chmod 755 $ORACLE_HOME
[oracle@RAC2 ~]$ [oracle@RAC2 ~]$ ls -l $ORACLE_HOME/bin/oracle
-rwxr-s--x 1 oracle asmadmin 232399431 May 3 15:16 /u01/app/oracle/product/11.2.0/db_1/bin/oracle
[oracle@RAC2 ~]$ exit
logout
[root@RAC2 ~]# chmod 6751 /u01/app/oracle/product/11.2.0/db_1/bin/oracle
[root@RAC2 ~]# su - oracle
[oracle@RAC2 ~]$ ls -l $ORACLE_HOME/bin/oracle
-rwsr-s--x 1 oracle asmadmin 232399431 May 3 15:16 /u01/app/oracle/product/11.2.0/db_1/bin/oracle
[oracle@RAC2 ~]$ [grid@RAC2 ~]$ ls -l $ORACLE_HOME/bin/oracle
-rwsr-s--x 1 grid oinstall 203973009 May 3 12:46 /u01/11.2.0/grid/bin/oracle
[grid@RAC2 ~]$

ORA-12537: TNS:connection closed的更多相关文章

  1. Oracle 11gR2 RAC 数据库不能连接(ORA-12537: TNS:connection closed)

    Oracle 11gR2 RAC 数据库不能连接(ORA-12537: TNS:connection closed)的解决 [oracle@rac01 ~]$ sqlplus /nolog SQL*P ...

  2. Oracle 11gR2 RAC 数据库不能连接(ORA-12537: TNS:connection closed)的解决

        Oracle 11gR2 RAC 数据库不能连接(ORA-12537: TNS:connection closed)的解决 [oracle@rac01 ~]$ sqlplus /nolog S ...

  3. RAC升级后,一个节点无法连接数据库,报ORA-12537: TNS:connection closed

    RAC从11.2.0.3升级到11.2.0.4后,一个节点的Public IP.VIP无法连接数据库 SQL> CONN SYS/oracle@192.168.122.101:1521/pplu ...

  4. 监听报错 TNS-00525: Insufficient privilege for operation 11gR2 + 连接报错ORA-12537: TNS:connection closed

    1.TNS-00525: Insufficient privilege for operation Started with pid= Listening on: (DESCRIPTION=(ADDR ...

  5. 启动监听报错:TNS-12537: TNS:connection closed TNS-12560: TNS:protocol adapter error TNS-00507: Connection closed Linux Error: 29: Illegal seek

    启动监听程序报错: 说明:在rhel5.8上安装完成oracle11g数据库后,使用netca创建完监听,启动监听时报错.还未使用dbca创建实例. [oracle@rusky-oracle11g ~ ...

  6. ORA-12537: TNS:connection closed错误处理过程

    https://blog.csdn.net/mchdba/article/details/50018571

  7. 【Ansible】SSH Error: ssh_exchange_identification: Connection closed by remote host

    ansible ssh到目标机器 时好时坏,报错:  SSH Error: ssh_exchange_identification: Connection closed by remote host ...

  8. XShell提示Connection closed by foreign host的问题 和 路由器分配IP的规则

    情况是这样的: VMware中有三个Linux机器分别是crxy99(192.168.1.99),crxy100(192.168.1.100),crxy101(192.168.1.101),crxy1 ...

  9. rabbitmq pika connection closed

    You are here: Home / rabbitmq pika connection closed rabbitmq pika connection closed By lijiejie on  ...

随机推荐

  1. Java备份Oracle数据库

    Java备份Oracle数据库 Java线程.Process.ProcessBuilder 2010 年 6 月 20 日 文章内容描述了使用Java执行外部Oracle导出命令备份数据库功能的示例, ...

  2. 如何在eclipse将程序导出成jar文件

    如何在eclipse将程序导出成jar文件 听语音 | 浏览:916 | 更新:2015-08-22 17:57 1 2 3 4 5 6 7 分步阅读 一键约师傅 百度师傅为你的电脑系统,选个靠谱师傅 ...

  3. spring接收json格式的多个对象参数(变通法)

    两种方法 方法1 如果使用spring mvc同客户端通信,完全使用json数据格式,需要如下定义一个RequestMapping @Controller public class TestContr ...

  4. Spring @Autowired注解在utils静态工具类

    [转] 使用场景:在一个静态方法中,如何使用以下注入: @Autowired private ItemMapper itemMapper; @Component public class TestUt ...

  5. 【Git学习笔记】远程仓库

    第一种情景:本地初始化一个Git仓库后,接着又在github上创建了一个Git仓库,现在要让这两个仓库进行远程同步. 1. 关联本地仓库就和远程仓库  $ git remote add origin ...

  6. 带你玩转JavaWeb开发之四 -如何用JS做登录注册页面校验

    今日内容 使用JQuery完成页面定时弹出广告 使用JQuery完成表格的隔行换色 使用JQuery完成复选框的全选效果 使用JQuery完成省市联动效果 使用JQuery完成下列列表左右选择 使用J ...

  7. sql注入漏洞

    在这么多bug里给我印象最深的就是sql注入漏洞,看上去没有问题的代码却会因为用户的不正常输入而带来极其严重的问题. 现在给大家分享一下如何修复SQL注入漏洞.下面是网上的两种解决方法,其中第二方法有 ...

  8. CLion 2016.2.2 注册激活码

    43B4A73YYJ-eyJsaWNlbnNlSWQiOiI0M0I0QTczWVlKIiwibGljZW5zZWVOYW1lIjoibGFuIHl1IiwiYXNzaWduZWVOYW1lIjoiI ...

  9. golang 环境一键式配置

    在window下,通过以下bat,自动设置环境变量,启动终端,并cd到gopath目录 set goroot=c:\go set gopath=d:\go @start "start gol ...

  10. Linq语言性能比较

    我不只一次听到不少做技术的朋友随口一句,“linq性能是最差的”,由于缺少具体的数字比照也就没在意,但心里隐隐觉得事实应该不是这样的,我记得我第一次听到有人贬低C# 3.0是在我工作后不久的一个夏季, ...