Java教程

关于ORA-3136的处理思路

本文主要是介绍关于ORA-3136的处理思路,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

在告警日志里出现了大量ORA-3136的报错,于是mos上查看:     从MOS的465043.1:Troubleshooting ORA-3136: WARNING Inbound Connection Timed Out,这篇文章找到一些端倪:     这个报错指出客户端连接没有在规定的时间内通过认证,这个时间是由SQLNET.INBOUND_CONNECT_TIMEOUT参数决定的。     此时在sqlnet.log($ORACLE_HOME/network/log)中可以看到有ORA-12170或TNS-12535的报错(服务端)。信息中应该包含连接的客户端地址,这将有助于判断这个问题。但是一些应用或者JDBC thin driver的应用可能没有此类信息。默认情况下,在11g以后的版本中,sqlnet.log日志不会产生。 从10.2.0.1以后的版本,参数SQLNET.INBOUND_CONNECT_TIMEOUT的默认设置是60秒。如果客户端没能在60秒内完成验证,在alert日志中就会出现Warning信息,客户端连接被终止。 这种超时限制主要用于阻止Dos(Denial of Service)服务攻击,防止大量的恶意客户端请求涌向数据库服务器,以消耗其资源。     对于这种报错的几种可能的原因: 1. 服务器接收到来自于不支持连接此数据库的大量客户端恶意请求。这种情况下,需要抛出这种错误以及相应的行为。通过sqlnet.log中记录的客户端地址,找到错误根源。 2. 服务器接收到一个合法的客户端连接请求,但是客户端花费了比默认60秒更长的时间来完成验证。 3. 数据库服务器当前负载很重,以至于不能在规定的时间内完成客户端登陆验证。     为了了解这种错误的原因,可能需要如下的检查:     默认60秒的值在大多数数据库服务器验证客户端请求的情况下是合适的。如果这个过程时间太长,那么在寻找解决方法之前可以先检查如下选项:     1. 检查数据库服务器的本地连接是否正常,速度是否合适。 2. 如果本地连接比较快,那么可以在网络管理员的帮助下检查网络延迟。 3. 检查数据库性能是否下降。 4. 检查alert日志中是否有其它严重的报错,例如ORA-600或ORA-7445,如果有,那么先解决它们,这些严重的报错可能引发数据库服务器的缓慢。     这是和网络连接相关的一个错误,Metalink上给出了如下的解决方案:     1.set INBOUND_CONNECT_TIMEOUT_<listenername>=0 in listener.ora 2. set SQLNET.INBOUND_CONNECT_TIMEOUT = 0 in sqlnet.ora of server. 3. stop and start both listener and database. 4. Now try to connect to DB and observe the behaviour
这篇关于关于ORA-3136的处理思路的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!