future2012lg

博客园 首页 新随笔 联系 订阅 管理

前面新装了11GR2 RAC,某天在做巡检的时候发现alert日志中存在如下报错:
Fatal NI connect error 12170.


  VERSION INFORMATION:
        TNS for Solaris: Version 11.2.0.3.0 - Production
        Oracle Bequeath NT Protocol Adapter for Solaris: Version 11.2.0.3.0 - Production
        TCP/IP NT Protocol Adapter for Solaris: Version 11.2.0.3.0 - Production
  Time: 16-MAY-2013 04:57:41
  Tracing not turned on.
  Tns error struct:
    ns main err code: 12535
    
TNS-12535: TNS:operation timed out
    ns secondary err code: 12560
    nt main err code: 505
    
TNS-00505: Operation timed out
    nt secondary err code: 145
    nt OS err code: 0
  Client address: (ADDRESS=(PROTOCOL=tcp)(HOST=171.17.108.18)(PORT=55532))
Thu May 16 04:58:27 2013

触发原因:
是由于程序异常断开导致超时,11g R1如果出现如上的错误信息会写入到sqlnet.log,11g R2会写入到alert.log,
其实出现此错误是正常的现象。

如果从深层次分析为什么出现这些错误,详细如下:
一个客户端连接整个步骤:
1、客户端发起一个connection连接监听
2、监听启动一个专属进程(服务器进程,也就是我们通常说的LOCA=NO进程)用于接收这个connection
3、在专属进程启动之后,监听会将这个connection传递给这个专属进程
4、专属进程通过这个connection来跟客户端握手
5、专属进程跟客户端信息交换需要建立一个session
6、session打开


当在以上的第3步到第4步时客户端关闭,所以当专属进程尝试跟客户端联系时发现连接已关闭时,就会报出我们看到的错误!!

如果不想让这些信息打印在alert日志中,设置如下:
在sqlnet.ora设置
DIAG_ADR_ENABLED = OFF
在listener.ora设置
DIAG_ADR_ENABLED_ = OFF
重启监听

http://blog.itpub.net/25964700/viewspace-1151584/

posted on 2015-11-21 17:54  future2012lg  阅读(1187)  评论(0编辑  收藏  举报