对于tnsping的连接超时的功能补充

简介: tnsping,作为Oracle连接测试的一个小巧的工具,其实大家已经不陌生了,但是使用tnsping有一个问题,就是连接超时,当然这个和网络的安全策略等密不可分,但是摆在我面前的一个问题是,现在有大量的服务器,每台数据库服务器上都有tnsnames.ora,如果需要判断tnsnames.ora里面的配置是否生效,使用tnsping是一个很自然的选择。
tnsping,作为Oracle连接测试的一个小巧的工具,其实大家已经不陌生了,但是使用tnsping有一个问题,就是连接超时,当然这个和网络的安全策略等密不可分,但是摆在我面前的一个问题是,现在有大量的服务器,每台数据库服务器上都有tnsnames.ora,如果需要判断tnsnames.ora里面的配置是否生效,使用tnsping是一个很自然的选择。
我也这么做了,我写了一个命令去解析tnsnames.ora 然后把里面的连接对象给标示出来。
cat tnsnames.ora|awk '{print $1}'|grep  -iv 'ADDRESS\|ADDRESS_LIST\|CONNECT_DATA\|SERVICE_NAME\|SID\|SERVER\|)'|sed 's/=(DESCRIPTION//g'|grep -v 'DESCRIPTION\|#'|awk -F= '{print $1}'|sed '/^$/d' |grep -v \(
命令的输出结果类似:
db133_95
csvip
testdb
我在这个基础上就可以使用tnsping来判断了。
但是刚开始我就发现这么做还是有一个隐患,那就是不可避免的连接超时问题。我们可以简单测试一下,看看默认的超时时长是多少?
$ time tnsping db84
TNS Ping Utility for Linux: Version 11.2.0.3.0 - Production on 18-MAY-2016 22:17:53
Copyright (c) 1997, 2011, Oracle.  All rights reserved.
Used parameter files:
/U01/app/oracle/product/11.2.3/db_1/network/admin/sqlnet.ora
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.11.17.84)(PORT = 1528)) (CONNECT_DATA = (SERVICE_NAME = sol)))
TNS-12535: TNS:operation timed out
real    1m0.011s
user    0m0.006s
sys     0m0.004s
通过time可以马上定位出超时时长是1分钟。
那么对于很多运行已久,业务依赖性较高的系统,tnsnames.ora里面的连接对象就非常多了,这个时候如果使用tnsping的方式那就很容易超时,假设里面有100个连接对象,如果存在30个无效连接对象,那就需要30分钟,如果有多台服务器,那就不用干其他的活了。
对于tnsping,这个命令也没有提供更多的使用选项,所以目前来看还无法指定超时时长。
$ tnsping --help
TNS Ping Utility for Linux: Version 11.2.0.3.0 - Production on 18-MAY-2016 18:03:15
Copyright (c) 1997, 2011, Oracle.  All rights reserved.
Used parameter files:
/U01/app/oracle/product/11.2.3/db_1/network/admin/sqlnet.ora
TNS-03505: Failed to resolve name
$ tnsping -h
TNS Ping Utility for Linux: Version 11.2.0.3.0 - Production on 18-MAY-2016 18:03:19
Copyright (c) 1997, 2011, Oracle.  All rights reserved.
Used parameter files:
/U01/app/oracle/product/11.2.3/db_1/network/admin/sqlnet.ora
TNS-03505: Failed to resolve name
这个还是依赖于系统级,那么我们把tnsping先放一放。看看还有没有其它的实现方式,一个很自然的实现方式就是telnet
一般测试连通性,我们可以使用telnet 服务器IP  端口的方式。下面是一个测试成功的案例。
$ telnet 10.11.65.111 1528
Trying 10.11.65.111...
Connected to 10.11.65.111.
Escape character is '^]'.
Connection closed by foreign host.
对于连通性问题的场景,telnet貌似也没有相应的超时选项。
所以使用telnet的方式和tnsping的效果差不多。
那么还有什么方式呢,这个时候我们可以好好想想还有那些系统级的工具可以满足要求,NetCat就是一个不错的选择。
所以想到了,我二话没说,就开始了测试。nc的一个亮点就是可以指定超时时长,比如我们设定为5秒,超时就显示连接失败
$ echo quit  | nc -w 5  -v 10.11.65.111 1521
Connection to 10.11.65.111 1521 port [tcp/ncube-lm] succeeded!
$ echo quit  | nc -w 5  -v 10.11.65.116 1521
nc: connect to 10.11.65.116 port 1521 (tcp) failed: No route to host
看来有了相应的解决思路,tnsping连接超时的问题就可以变通解决了。

目录
相关文章
|
6月前
|
Oracle 关系型数据库 Java
分享一个 Oracle RAC 模式下客户端建立JDBC初始连接时因ONS造成应用启动时卡顿30秒问题的排查分析案例
分享一个 Oracle RAC 模式下客户端建立JDBC初始连接时因ONS造成应用启动时卡顿30秒问题的排查分析案例
|
NoSQL Redis
Could not connect to Redis at 127.0.0.1:6379: 由于目标计算机积极拒绝无法连接解决方案
Could not connect to Redis at 127.0.0.1:6379: 由于目标计算机积极拒绝无法连接解决方案
Could not connect to Redis at 127.0.0.1:6379: 由于目标计算机积极拒绝无法连接解决方案
|
Oracle 安全 关系型数据库
ORACLE 11g【安装流程】及部门问题解决,ORA-12514: TNS:监听程序当前无法识别连接描述符中请求的服务 下
ORACLE 11g【安装流程】及部门问题解决,ORA-12514: TNS:监听程序当前无法识别连接描述符中请求的服务 下
190 0
ORACLE 11g【安装流程】及部门问题解决,ORA-12514: TNS:监听程序当前无法识别连接描述符中请求的服务   下
|
SQL Oracle 关系型数据库
ORACLE 11g【安装流程】及部门问题解决,ORA-12514: TNS:监听程序当前无法识别连接描述符中请求的服务 上
ORACLE 11g【安装流程】及部门问题解决,ORA-12514: TNS:监听程序当前无法识别连接描述符中请求的服务 上
399 0
ORACLE 11g【安装流程】及部门问题解决,ORA-12514: TNS:监听程序当前无法识别连接描述符中请求的服务   上
|
Python
Python 技术篇-全局与当前socket超时连接时间设置方法实例演示,查看socket超时连接时间
Python 技术篇-全局与当前socket超时连接时间设置方法实例演示,查看socket超时连接时间
437 0
Python 技术篇-全局与当前socket超时连接时间设置方法实例演示,查看socket超时连接时间
|
监控 BI 数据库
Reporting Service 2008 “报表服务器数据库内出错。此错误可能是因连接失败、超时或数据库中磁盘空间不足而导致的”
今天遇到了两个关于Reporting Service的问题, 出现问题的环境为Microsoft SQL Server 2008 R2 (SP2) - 10.50.4000.0 (X64) 。具体情况请见下面描述。
1933 0

热门文章

最新文章