在Alert log 中经常能看到这个错误: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]$
这个是我在Oracle 11gR2下用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 the client domain to append to unqualified names
(2). Prioritize naming methods
(3). Enable logging and tracing features
(4). Route connections through specific processes
(5). Configure parameters for external naming
(6). Configure Oracle Advanced Security
(7). Use protocol-specific parameters to restrict access to the database
sqlnet.ora 文件的 Profile Parameters 如下:
(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的错误。
在oracle 10.2.0.1之前,这个参数默认是0s。即不受连接时间的限制。在这个版本之后,为了防止Dos的攻击,将默认值该成60s.
二. 演示一个案例
2.1 修改sqlnet.ora
添加参数:
SQLNET.INBOUND_CONNECT_TIMEOUT = 10
我测试的Oracle 11gR2. 不需要重启监听程序。 不过在另一篇官文档看到说要重启监听和DB。 如果没有生效的,就重启一下监听看看。
2.2 在客户端用错误的用户名和密码连接服务器
C:/Users/Administrator.DavidDai>sqlplus system/oracl@192.168.2.42:1521/dave
SQL*Plus: Release 11.2.0.1.0 Production on 星期三 3月 9 22:28:11 2011
Copyright (c) 1982, 2010, Oracle. All rights reserved.
ERROR:
ORA-01017: invalid username/password; logon denied
请输入用户名:
保持这个窗口不要关闭。
2.3 查看alert log
10秒钟之后,就会多出如下信息:
Fatal NI connect error 12170.
VERSION INFORMATION:
TNS for Linux: Version 11.2.0.1.0 - Production
Oracle Bequeath NT Protocol Adapter for Linux: Version 11.2.0.1.0 - Production
TCP/IP NT Protocol Adapter for Linux: Version 11.2.0.1.0 - Production
Time: 09-MAR-2011 22:31:31
Tracing not turned on.
Tns error struct:
ns main err code: 12535
TNS-12535: TNS:operation timed out
ns secondary err code: 12606
nt main err code: 0
nt secondary err code: 0
nt OS err code: 0
Client address: (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.8.21)(PORT=53486))
WARNING: inbound connection timed out (ORA-3136)
--如果客户端的连接程序没有关闭,会一直挂在着
Wed Mar 09 22:32:36 2011
--客户端连接关闭之后,显示最后一行。
也可以查看sqlnet.log 文件:
[xezf@localhost log]$ pwd
/home/oracle_app/network/log
[xezf@localhost log]$ ls
listener.log sqlnet.log
[xezf@localhost log]$ tail -20 sqlnet.log
Client address: (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.2.222)(PORT=56927))
***********************************************************************
Fatal NI connect error 12170.
VERSION INFORMATION:
TNS for Linux: Version 10.2.0.1.0 - Production
Oracle Bequeath NT Protocol Adapter for Linux: Version 10.2.0.1.0 - Production
TCP/IP NT Protocol Adapter for Linux: Version 10.2.0.1.0 - Production
Time: 23-9ÔÂ -2011 17:56:21
Tracing not turned on.
Tns error struct:
ns main err code: 12535
TNS-12535: TNS: ²Ù×÷³¬Ê±
ns secondary err code: 12606
nt main err code: 0
nt secondary err code: 0
nt OS err code: 0
Client address: (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.2.222)(PORT=60941))
三. 解决方法
一般情况下60s是够用的,如果60秒还报ORA-3136的错误。 Oracle 的解决方法是增加这个时间,用更多的时间来连接。 Oracle 建议的修改方式如下:
3.1 修改sqlnet.ora
将Timeout 设成120
SQLNET.INBOUND_CONNECT_TIMEOUT = 120
3.2 修改listener.ora
添加参数:
INBOUND_CONNECT_TIMEOUT_<listenername> = 110
加上监听名称,我的例子中的监听是LISTENER. 所以设成:
INBOUND_CONNECT_TIMEOUT_ LISTENER = 110
注意:
inbound_connect_timeout_listener_name 参数的值要小于sqlnet.inbound_connect_timeout 的值。
这样设置以后,如果clients因为系统或者网络的原因在指定的时间没有连接到DB,那么Oracle会根据需要来增加连接的时间。
---------------------------------------------------------------------------------------------------
Blog: http://blog.csdn.net/tianlesoftware
网上资源: http://tianlesoftware.download.csdn.net
相关视频:http://blog.csdn.net/tianlesoftware/archive/2009/11/27/4886500.aspx
DBA1 群:62697716(满); DBA2 群:62697977(满) DBA3 群:62697850(满)
DBA 超级群:63306533(满); DBA4 群: 83829929 DBA5群: 142216823
聊天 群:40132017
--加群需要在备注说明Oracle表空间和数据文件的关系,否则拒绝申请
分享到:
相关推荐
- 如果客户端尝试通过`sqlplus username/password@local_dev`的方式连接数据库,但未在`sqlnet.ora`中配置`NAMES.DEFAULT_DOMAIN`,则可能会出现类似“ORA-12154:TNS:无法处理服务名”的错误。 - **解决方法**: -...
在Oracle数据库系统中,SQLNET.ORA是一个至关重要的配置文件,它定义了客户端与服务器之间的网络通信参数。理解并正确配置SQLNET.ORA文件,对于确保数据库连接的稳定性和安全性至关重要。下面,我们将深入探讨SQL...
在oracle里面运行一下,解决Exception java.sql.SQLException ORA-00600 内部错误代码
oracle网络配置(listener_ora-sqlnet_ora-tnsnames_ora).mht
Listener.ora、sqlnet.ora、tnsnames.ora三个配置文件区别 Listener.ora、sqlnet.ora、tnsnames.ora三个配置文件是Oracle数据库中三个重要的配置文件,每个文件都有其特定的作用和用途。 首先,Listener.ora文件是...
尝试使用`sqlplus username/password@local_dev`命令连接数据库时,将会出现类似“ORA-12154: TNS: 无法处理服务名”的错误。这是因为客户端实际上尝试连接的是`local_dev.com`,而此别名并未在`tnsnames.ora`中定义...
### Oracle网络配置详解:Listener.ora, Sqlnet.ora与Tnsnames.ora #### Listener.ora:监听器配置文件 `listener.ora` 文件是Oracle数据库系统中至关重要的网络配置文件之一,它负责管理数据库的监听器服务,确保...
sqlnet.ora文件通常位于$ORACLE_HOME/network/admin/目录下,与tnsnames.ora和listener.ora文件位于同一路径。该文件的配置非常简单,只需在文件中添加相应的记录即可。 限制IP访问的配置可以通过tcp.validnode_...
-- 解决ORA-00904: "WMSYS"."WM_CONCAT": 标识符无效 的文件包....... -- 解决ORA-00904: "WMSYS"."WM_CONCAT": 标识符无效 的文件包....... -- 解决ORA-00904: "WMSYS"."WM_CONCAT": 标识符无效 的文件包....... ...
该文件通常位于 $ORACLE_HOME/network/admin/ 目录下,与 tnsnames.ora 和 listener.ora 位于同一路径。 通过配置 sqlnet.ora 文件,可以实现轻量级的访问限制,效率高于在数据库内部通过触发器进行限制。下面是...
### Oracle配置文件详解:tnsnames.ora, listener.ora, sqlnet.ora #### 一、概述 在Oracle数据库的网络配置中,有三个重要的配置文件:`listener.ora`、`sqlnet.ora` 和 `tnsnames.ora`。这些文件位于 `$ORACLE_...
1. **数据采集**:`oracledb_exporter`通过与Oracle数据库进行交互,收集如SQL执行时间、等待事件、I/O统计、内存使用等关键性能指标。 2. **指标暴露**:它将这些数据转换为Prometheus可读的格式,即文本HTTP端点,...
在Oracle数据库系统中,`listener.ora`, `sqlnet.ora` 和 `tnsnames.ora` 是三个至关重要的配置文件,它们共同负责网络服务的管理和连接。理解它们之间的关系和如何手工配置对于管理和维护Oracle数据库是至关重要的...
- `java.sql.SQLException: ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired`: 这表示尝试获取的资源已被其他会话占用。可以调整事务隔离级别或增加等待时间。 7. **游标问题** ...
在Oracle数据库管理与维护过程中,正确理解并掌握`init.ora`文件的位置至关重要。该文件是Oracle实例启动时读取的重要配置文件之一,用于设置数据库运行所需的参数。本文将详细介绍如何定位`init.ora`文件的具体位置...
tnsnames.ora文件通常位于$ORACLE_HOME/network/admin目录下,与listener.ora和sqlnet.ora一起协同工作,为Oracle数据库客户端提供连接服务。 sqlnet.ora文件在这个过程中起到关键的决策作用,它类似Linux或其他...
http://tomcat.apache.org/download-70.cgi http://tomcat.apache.org/download-70.cgi
在Oracle数据库的运行过程中,`listener.ora`和`tnsnames.ora`是两个至关重要的配置文件,它们负责管理和通信数据库实例与客户端应用程序之间的连接。 `listener.ora`文件是Oracle监听器的配置文件,它定义了监听器...
注:Oracle客户端向下兼容,故也可以连接11g的数据库 ... 1.下载instantclient-basic-nt-12.1.0.2.0.zip解压至某路径,如:D:\Database\instantclient_12_1(注:由于...注:sqlnet.ora和tnsnames.ora可向他人复制可得
本文将详细介绍`listener.ora`、`sqlnet.ora`、`tnsnames.ora`这三个核心配置文件的作用及其配置方法。 #### 1. `sqlnet.ora` 文件 `sqlnet.ora`文件的作用类似于Linux或其他Unix系统中的`nsswitch.conf`文件,它...