对于tnsping的连接超时的功能补充(二)(r9笔记第22天)
对于tnsping的一些小问题,自己也想了些办法来补充,最后发现使用nc是一个不错的选择。可以参考 对于tnsping的连接超时的功能补充
主要思想如下:
如果网络是通的,那么会显示succeeded,否则会有一些错误信息
# nc -w 2 -v 10.11.65.111 22|grep succ
Connection to 10.11.65.111 22 port [tcp/ssh] succeeded!
# nc -w 2 -v 10.11.65.191 22|grep succ
nc: connect to 10.11.65.191 port 22 (tcp) timed out: Operation now in progress
所以我们需要改进tnsping就会很自然的想到解析tnsnames.ora这个文件,当然解析起来会有一些问题,比如你碰到下面的两种格式的配置,就会有些迷茫了。
test1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.11.2.129)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = peak)
)
)
test2=(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.11.64.161)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = accdb0)(server=dedicated)))
对于这种格式,解析起来就会非常吃力。可能会想到很多复杂的逻辑和判断,我差点写一个Java程序来解析了。
最后发现还是简单一些,这两种格式的共同之处就是HOST,PORT都在一行,而这也是我们定义tnsnames.ora文件的基本格式规范。
明白了这点我们解析起来就容易多了。
通过 grep -i 'TCP|HOST|PORT' tnsnames.ora 解析到的就是我们需要的内容了。
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.11.55.31)(PORT = 1523))
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.11.133.128)(PORT = 1529))
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.11.133.71)(PORT = 1528))
而在这个基础上我们进行过滤,转换,就写了下面的一个命令,一气呵成。
grep -i 'TCP|HOST|PORT' tnsnames.ora|grep -v #|awk -FHOST '{print $2}'|sed 's/PORT//g'|awk -F= '{print $2 $3}'|sed -e 's/CONNECT_DATA//g' -e 's/(//g' -e 's/)//g'|awk '{print "nc -w 2 -v "$1" "$2"|grep succ"}'|sort|uniq> a.sh
输出的文件格式就会是下面的形式:
nc -w 2 -v 192.168.97.17 1521|grep succ
nc -w 2 -v 192.168.97.60 1532|grep succ
nc -w 2 -v 192.168.97.83 1522|grep succ
nc -w 2 -v 210.245.20.28 1521|grep succ
nc -w 2 -v bak.test.com 1521|grep succ
直接运行生成的脚本即可。在一些耦合性高的环境中,这种方式就非常有效了,那些成功,哪些失败,一目了然。我们也可以只分析哪些失败的。
Connection to 10.11.133.15 1523 port [tcp/cichild-lm] succeeded!
Connection to 10.11.133.16 1528 port [tcp/mciautoreg] succeeded!
nc: connect to 10.11.133.163 port 1521 (tcp) timed out: Operation now in progress
Connection to 10.11.65.23 1528 port [tcp/mciautoreg] succeeded!
nc: connect to 192.168.1.41 port 1523 (tcp) timed out: Operation now in progress
nc: connect to 210.245.20.28 port 1521 (tcp) failed: Network is unreachable
nc: connect to bak.test.com port 1521 (tcp) timed out: Operation now in progress
这种方式就会大大提高我们分析问题的效率。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 一起学习PHP中断言函数的使用
- Jenkins实现自动化邮件发送踩坑记录
- sed 实用实例参考
- 微信小程序WXML页面常用语法(讲解+示例)
- Golang领域模型开篇,当Go遇上DDD
- Spring事务专题(五)聊聊Spring事务到底是如何实现的
- 深色模式适配指南
- 【Flutter 专题】97 仿网易新闻标签选择器
- 宋宝华:论Linux的页迁移(Page Migration)完整版
- 三、玩转Git三剑客-Git与Github的简单同步
- 四、玩转Git三剑客-Git多人单分支集成协作时的常见场景
- 准时下班的秘密:集成 GitLab && JIRA 实现自动化 workflow
- ZLT-MP v4.1.0 发布
- 高并发系统三大利器之限流
- XtraBackup工具详解 Part 2 xtrabackup安装