WARNING: inbound connection timed out (ORA-3136)
WARNING: inbound connection timed out (ORA-3136)
1 错误信息
有时候我们在alter 日志中发现如下错误:
WARNING: inbound connection timed out (ORA-3136)
官方提供的说明如下:
03136, 00000, "inbound connection timed out"
// *Cause: Inbound connection was timed out by the server because
// user authentication was not completed within the given time
// specified by SQLNET.INBOUND_CONNECT_TIMEOUT or its default value
// *Action: 1) Check SQL*NET and RDBMS log for trace of suspicious connections.
// 2) Configure SQL*NET with a proper inbound connect timeout value
// if necessary.
2 伴生现象
2.1 SQLNET.LOG
sqlnet.log 中一般会有伴生日志同时记录:
Fatal NI connect error 12170.
.........略
2.2 客户端
客户端接收错误信息:
ORA-12547: TNS:lost contact 或者 ORA-12637: Packet receive failed error message.
3 分析
在官方提供的说明里比较清晰的说明。出现该错误,是由于在有限的时间内未完成登录授权。 而控制该验证时长的参数是sqlnet.inbound_connect_timeout 参数。该参数默认是60秒。
LSNRCTL> show inbound_connect_timeout
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
LISTENER parameter "inbound_connect_timeout" set to 60
The command completed successfully
其实一般情况下,60秒的时间,数据库足够处理成千上万次的登录了。所以,出现这种情况, 肯定是数据库存在某些其他方面的问题。这要具体问题具体分析了。
4 解决
- 在listener.ora 中添加配置: INBOUND_CONNECT_TIMEOUT_<listenername>=0
- 在sqlnet.ora 中添加配置: SQLNET.INBOUND_CONNECT_TIMEOUT = 0
- 重启或者reload 监听,一般建议重启,reload有时候不生效。
- INBOUND_CONNECT_TIMEOUT_<listenername> 应小于等于SQLNET.INBOUND_CONNECT_TIMEOUT