您的位置:首页 > 其它

WARNING: inbound connection timed out (ORA-3136) 解决方法

2011-03-09 23:07 656 查看
在Alertlog 中经常能看到这个错误:WARNING:inbound connection timed out (ORA-3136)。 这个是个很常见的错误。

一. sqlnet.ora 说明

在讲这个错误之前,我们先看下sqlnet.ora。
正常情况下,在$ORACLE_HOME/network/admin下有3个文件:
listener.ora, sqlnet.ora和 tnsnames.ora
如:
[oracle@qs-dmm-rh1 admin]$ pwd
/u01/app/oracle/product/11.2.0/dbhome_1/network/admin
[oracle@qs-dmm-rh1 admin]$ ls
listener.ora samples shrept.lst sqlnet.ora tnsnames.ora

如果没有这个文件,可以手工的从samples文件夹下copy出来,或者使用netmgr,netca命令来创建。 这2个命令是图形化的界面,配置起来比较简单。

listener.ora文件保存的是DB的监听信息:

[oracle@qs-dmm-rh1 admin]$ cat listener.ora
# listener.ora Network Configuration File:/u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
# Generated by Oracle configuration tools.
LISTENER =
(DESCRIPTION=
(ADDRESS= (PROTOCOL = TCP)(HOST = localhost6.localdomain6)(PORT = 1521))
)

SID_LIST_LISTENER =
(SID_LIST=
(SID_DESC=
(GLOBAL_DBNAME = orcl)
(ORACLE_HOME =/u01/app/oracle/product/11.2.0/dbhome_1)
(SID_NAME = orcl)
)
)
--静态注册
ADR_BASE_LISTENER = /u01/app/oracle

[oracle@qs-dmm-rh1 admin]$

这个是我在Oracle11gR2下用netmgr配置的一个监听文件。一般情况下,一台服务器只有一个实例。 如果有多个实例的话,也没有关系,在没有配置静态注册的话,PMON会自动将实例的信息注册到Listener中。 不过PMON需要到mount状态以后才能注册。 所以就需要配置静态注册。

tnsnames.ora 保存的是Service Name的信息:
[oracle@qs-dmm-rh1 admin]$ cat tnsnames.ora
ORCL_ST =
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS = (PROTOCOL = TCP)(HOST =192.168.2.43)(PORT = 1521))
)
(CONNECT_DATA=
(SERVICE_NAME = orcl)
)
)

ORCL_PD =
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS = (PROTOCOL = TCP)(HOST =192.168.2.42)(PORT = 1521))
)
(CONNECT_DATA=
(SERVICE_NAME = orcl)
)
)


sqlnet.ora 保存的是DB的profile信息:
sqlnet.ora 保存了profile的配置信息。 该文件默认保存在$ORACLE_HOME/network/admin下,也可以保存在$TNS_ADMIN指定的目录下。

sqlnet.ora文件具有如下功能:
(1). Specify theclient domain to append to unqualified names
(2). Prioritize naming methods
(3). Enable loggingand tracing features
(4). Routeconnections through specific processes
(5). Configureparameters for external naming
(6). Configure Oracle Advanced Security
(7). Useprotocol-specific parameters to restrict access to the database
sqlnet.ora 文件的 ProfileParameters 如下:
(1). BEQUEATH_DETACH
(2). DEFAULT_SDU_SIZE
(3). DISABLE_OOB
(4). NAMES.DEFAULT_DOMAIN
(5). NAMES.DIRECTORY_PATH
(6). NAMES.LDAP_AUTHENTICATE_BIND
(7). NAMES.LDAP_PERSISTENT_SESSION
(8). RECV_BUF_SIZE
(9). SDP.PF_INET_SDP
(10). SEC_USER_AUDIT_ACTION_BANNER
(11). SEC_USER_UNAUTHORIZED_ACCESS_BANNER
(12). SEND_BUF_SIZE
(13). SQLNET.ALLOWED_LOGON_VERSION
(14). SQLNET.AUTHENTICATION_KERBEROS5_SERVICE
(15). SQLNET.AUTHENTICATION_SERVICES
(16). SQLNET.CLIENT_REGISTRATION
(17). SQLNET.CRYPTO_CHECKSUM_CLIENT
(18). SQLNET.CRYPTO_CHECKSUM_SERVER
(19). SQLNET.CRYPTO_CHECKSUM_TYPES_CLIENT
(20). SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER
(21). SQLNET.ENCRYPTION_CLIENT
(22). SQLNET.ENCRYPTION_SERVER
(23). SQLNET.ENCRYPTION_TYPES_CLIENT
(24). SQLNET.ENCRYPTION_TYPES_SERVER
(25). SQLNET.EXPIRE_TIME
(26). SQLNET.INBOUND_CONNECT_TIMEOUT
(27). SQLNET.KERBEROS5_CC_NAME
(28). SQLNET.KERBEROS5_CLOCKSKEW
(29). SQLNET.KERBEROS5_CONF
(30). SQLNET.KERBEROS5_KEYTAB
(31). SQLNET.KERBEROS5_REALMS
(32). SQLNET.OUTBOUND_CONNECT_TIMEOUT
(33). SQLNET.RADIUS_ALTERNATE
(34). SQLNET.RADIUS_ALTERNATE_PORT
(35). SQLNET.RADIUS_ALTERNATE_RETRIES
(36). SQLNET.RADIUS_AUTHENTICATION
(37). SQLNET.RADIUS_AUTHENTICATION_INTERFACE
(38). SQLNET.RADIUS_AUTHENTICATION_PORT
(39). SQLNET.RADIUS_AUTHENTICATION_RETRIES
(40). SQLNET.RADIUS_AUTHENTICATION_TIMEOUT
(41). SQLNET.RADIUS_CHALLENGE_RESPONSE
(42). SQLNET.RADIUS_SECRET
(43). SQLNET.RADIUS_SEND_ACCOUNTING
(44). SQLNET.RECV_TIMEOUT
(45). SQLNET.SEND_TIMEOUT
(46). SSL_CERT_REVOCATION
(47). SSL_CERT_FILE
(48). SSL_CERT_PATH
(49). SSL_CIPHER_SUITES
(50). SSL_CLIENT_AUTHENTICATION
(51). SSL_SERVER_DN_MATCH
(52). SSL_VERSION
(53). TCP.CONNECT_TIMEOUT
(54). TCP.EXCLUDED_NODES
(55). TCP.INVITED_NODES
(56). TCP.VALIDNODE_CHECKING
(57). TCP.NODELAY
(58). TNSPING.TRACE_DIRECTORY
(59). TNSPING.TRACE_LEVEL
(60). USE_CMAN
(61). USE_DEDICATED_SERVER
(62). WALLET_LOCATION
(63). WALLET_OVERRIDE

参数比较多,在这里只看与我们错误相关的一个参数:

SQLNET.INBOUND_CONNECT_TIMEOUT

这个参数是指客户端连接数据库服务认证的时间长,即用户连接DB的时间的,单位是秒。 当client 在INBOUND_CONNECT_TIMEOUT指定的时间内没有成功连接上服务器(db 负载大,网络延时等原因)。 那么在服务器的sqlnet.log里就会记录下客户端的IP和ORA-12170:TNS:Connect timeout occurred的错误信息。 同时客户端接收到ORA-12547:TNS:lost contact 或者ORA-12637:Packet receive failed的错误。

在oracle10.2.0.1之前,这个参数默认是0s。即不受连接时间的限制。在这个版本之后,为了防止Dos的攻击,将默认值该成60s.

有三种原因可能导致这个错误:(1) Server gets a connectionrequest from a malicious client which is not supposed to connect to thedatabase , in which case the error thrown is the correct behavior. Youcan get the client address for which the error was thrown via sqlnet logfile.
--恶意的攻击,可以在sqlnet log里查看客户端的地址信息。
(2) The server receives a validclient connection request but the client takes a long time to authenticate morethan the default 60 seconds.
--服务端正常的接收了客户端的请求,但是客户端用了超过默认60秒的时间来验证。
(3) The DB server is heavily loadeddue to which it cannot finish the client logon within the timeoutspecified.
--DB Server 负载较大,此时也可能导致连接超时。

二. 解决方法

2.1 增加连接时间

一般情况下60s是够用的,如果60秒还报ORA-3136的错误。 Oracle 的解决方法是增加这个时间,用更多的时间来连接。 这个也是Oracle 建议的修改方法。 (1)修改sqlnet.ora:将Timeout 设成180
SQLNET.INBOUND_CONNECT_TIMEOUT= 180


(2) 修改listener.ora
添加参数:
INBOUND_CONNECT_TIMEOUT_<listenername> = 170

加上监听名称,我的例子中的监听是LISTENER. 所以设成:
INBOUND_CONNECT_TIMEOUT_ LISTENER = 170

注意:
inbound_connect_timeout_listener_name 参数的值要小于sqlnet.inbound_connect_timeout 的值。

(3)重启监听

这样设置以后,如果clients因为系统或者网络的原因在指定的时间没有连接到DB,那么Oracle会根据需要来增加连接的时间。

2.2 关闭超时限制

在安全上允许的情况下,设置如下参数为0以关闭连接超时的限制:
(1) listener.ora:
INBOUND_CONNECT_TIMEOUT_LISTENER=0

(2) sqlnet.ora:
SQLNET.INBOUND_CONNECT_TIMEOUT=0

(3).重启实例listener


参考:
Note465043.1 Troubleshooting ORA - 3136WARNING Inbound Connection Timed Out


-------------------------------------------------------------------------------------------------------
版权所有,文章允许转载,但必须以链接方式注明源地址,否则追究法律责任!
Skype: tianlesoftware
QQ: tianlesoftware@gmail.com
Email: tianlesoftware@gmail.com
Blog: http://www.tianlesoftware.com
Weibo: http://weibo.com/tianlesoftware
Twitter: http://twitter.com/tianlesoftware
Facebook: http://www.facebook.com/tianlesoftware
Linkedin: http://cn.linkedin.com/in/tianlesoftware


-------加群需要在备注说明Oracle表空间和数据文件的关系,否则拒绝申请----
DBA1 群:62697716(满); DBA2 群:62697977(满) DBA3 群:62697850(满)
DBA 超级群:63306533(满); DBA4 群:83829929 DBA5群: 142216823
DBA6 群:158654907 DBA7 群:172855474 DBA总群:104207940
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: