一次ORA-12547: TNS:lost contact问题分析

版权声明:本文为Buddy Yuan原创文章,转载请注明出处。原文地址:一次ORA-12547: TNS:LOST CONTACT问题分析

今天无意中连一套数据库,连接的时候直接报ORA-12547: TNS:lost contact

这种问题也是很奇怪的,我随手就做了一个strace进行分析了一下。

[oracle@itwgbx2 admin]$ strace -f -o /tmp/trace.1.log $ORACLE_HOME/bin/sqlplus / as sysdba

SQL*Plus: Release 10.2.0.4.0 - Production on Fri May 29 20:30:17 2020

Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.

ERROR:
ORA-12547: TNS:lost contact

通过strace生成的trace文件进一步分析,如下所示:

可以看到这里产生了一个trace文件,打开trace文件,可以发现这里报”opiino: Attach failed! error=-1 “错误。

查看MOS文档”opiino: Attach failed! error=-1 ifvp=0″ written in Database UDUMP file (Doc ID 399727.1),里面说明了原因:
1.这个错误是由数据库在客户端进程的OPI / OCI(两次任务)上异常断开引起的。如果在数据库可以完成两次任务通信功能之前(异常)终止了客户端,则会发生这种情况。
2.如果Oracle二进制文件位于使用NFS挂载,使用了noac参数/选项,则也可能引发此错误。
3.另一个可能的原因,以及可能导致连接大量增加或断开的原因是,是10g引入的INBOUND_CONNECT_TIMEOUT参数,设置的比默认值还要低。另一个错误可能在数据库警报日志中报告的异常断开,特别是与11g中经常出现ORA-609 “opiodr aborting process unknown ospid。这两种情况非常类似,都是从“opi”数据库层生成的错误最终导致客户端异常。
4.另一个潜在(但罕见)的原因是,用于客户端访问的监听版本比正在访问的数据库的版本低。例如,使用9.2.x监听器访问未经认证或支持的10.x数据库,这将导致连接异常
上述几种错误的形式确实很多需要去验证,我基本上确认了2,3,4在我的系统中不可能,难道是1这种情况。1这种情况需要收集更多的信息来确认。
受影响的客户端和数据库之间的网络是否处于稳定状态?
连接活动是否突然增加并且异常增加,可能会使数据库连接数爆满?
客户端是否异常终止(例如机器故障)?
我又仔细的check了一遍,确认不存在上述问题。就在不知道如何在查下去的时候,我手动又把刚刚的strace文件又做了一遍grep,这次grep发现了一个新的方向。
[oracle@itwgbx2 tmp]$ cat trace.1.log | grep -i TNS-
26554 write(7, “TNS-12649: Unknown encryption or”…, 58
26553 write(8, “TNS-12547: TNS:lost contact\n”, 28
26553 write(8, “TNS-00517: Lost contact\n”, 24
可以看到,这里出现了一个错误”TNS-12649: Unknown encryption or”。这肯定是监听加密有问题。我查看了一下sqlnet.ora文件,确实上面设置了一些监听加密的参数,我们这些加密的参数全部取消掉,再次登录就恢复了正常。这波真是山穷水复疑无路,柳暗花明又一村。

分享到: 更多

Post a Comment

Your email is never published nor shared. Required fields are marked *