当前位置: 首页 > news >正文

半自动化运维之快速连接到指定环境(一) (r5笔记第61天)

在大量的分布式环境中,可能存在着大量的主机配置,ip配置,数据库实例配置,甚至操作系统用户,数据库用户密码也不同,这个时候如果记录在10条左右还能应付,但是如果给你几百个这样的环境,每次都需要先查找对应的操作系统用户,主机名或者IP就显得很麻烦,尽管已经设置了ssh信任连接。但是还是需要你知道用户名的前提下来操作。对于数据库的连接也是如此,你可以使用tnsping来得到对应的主机名,但是还需要费些功夫在查找对应的数据库用户名密码上,因为知道主机名可能变得没有那么重要,我们可能只需要在客户端连接即可。如果要想把这些操作变为一个更快捷轻松的方式,使用配置文件就是一个不错的选择,有很多自动化实现脚本是把这些配置信息放在数据库表中,在需要的时候查取,过滤等等。其实我们也可以在配置文件中进行信息的简单过滤就可以避免去连接数据库(因为数据库环境也有可能不可用)这个时候使用awk就是一个不错的选择。其实sed+awk能够实现很多复杂的功能,我就次抛砖引玉,做一个粗泛的例子来说明一下。假设我们使用了配置文件hosts.lst内容如下:oel1 192.168.27.130 TEST11G ora11g n1 n1oel1 192.168.27.130 DG11G ora11g n1 n1 oel2 192.168.28.131 ORA11G ora11g n1 n1分别代表的含义就是主机名,主机Ip地址,数据库实例名,操作系统用户,数据库用户名,数据库用户密码假设我们只知道数据库实例,这种场景可能比较多。我们只是想连接到指定的数据库实例,这个时候使用sqlplus即可。又或者我们知道主机名和数据库实例名,我们需要连接到服务器上去做一些操作,就可以使用ssh来完成,ssh信任关系是需要提前配置的。我们可以使用如下的脚本来完成这两个功能,当然继续扩展也是可以的。if [ $# -eq 1 ]thencc_inst=$1cat hosts.lst |awk 'BEGIN{IGNORECASE=1cc_inst="'$cc_inst'"cc_index=1}{if ($3== cc_inst ){print cc_index,$1,$2 $3,$4, "\n sqlplus " $5"/"$6"@"$3cc_index=cc_index+1}}'fiif [ $# -eq 2 ]thencc_hosts=$1cat hosts.lst |awk 'BEGIN{IGNORECASE=1cc_inst="'$2'"cc_hosts="'$cc_hosts'"cc_index=1}{if ($1== cc_hosts && $3==cc_inst){print cc_index,$1,$2 $3,$4, "\n ssh " $4"@"$1cc_index=cc_index+1}}'fi简单演示一下。比如我们需要连接至TEST11G这个数据块实例。$ ksh con.sh test11g1 oel1 192.168.27.130TEST11G ora11g sqlplus n1/n1@TEST11G比如我们知道主机名为oel1,数据库实例为test11g$ ksh con.sh oel1 test11g1 oel1 192.168.27.130TEST11G ora11g ssh ora11g@oel1如果观察仔细,会发现其实这个过滤中已经设置了大小写不敏感。对于这两个功能是通过输入参数来进行区分的,如果输入参数为1个,即进行第一个场景的处理,如果为2个,则进行主机名和数据库实例名的过滤和处理。

相关文章:

  • 巧用外部表备份历史数据(r5笔记第62天)
  • pl/sql中的forall简单测试(r5笔记第63天)
  • 一次ORA-00600问题的排查和分析(上)(r5笔记第64天)
  • 一次ORA-00600问题的排查和分析(下)(r5笔记第65天)
  • 毕业设计的小故事(r5笔记第67天)
  • 重启数据库的一场闹剧(r5笔记第68天)
  • 关于aio的设置的讨论(r5笔记第69天)
  • 一条sql语句的改进探索(r5笔记第70天)
  • 海量数据迁移之传输表空间(一) (r5笔记第71天)
  • 数据刷新中的并行改进(r5笔记第72天)
  • 一条sql语句的建议调优分析(r5笔记第73天)
  • 泰国之旅随感(r1笔记第70天)
  • 曼谷周末游(r5笔记第74天)
  • 使用flashback query巧妙抽取指定数据(r5笔记第75天)
  • 数据刷新中的并行改进(二) (r5笔记第76天)
  • [NodeJS] 关于Buffer
  • Cookie 在前端中的实践
  • httpie使用详解
  • IDEA 插件开发入门教程
  • mysql中InnoDB引擎中页的概念
  • Redis 懒删除(lazy free)简史
  • vue2.0一起在懵逼的海洋里越陷越深(四)
  • 百度小程序遇到的问题
  • 悄悄地说一个bug
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • 再谈express与koa的对比
  • 怎样选择前端框架
  • No resource identifier found for attribute,RxJava之zip操作符
  • 阿里云移动端播放器高级功能介绍
  • ​如何防止网络攻击?
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • #vue3 实现前端下载excel文件模板功能
  • $().each和$.each的区别
  • $.proxy和$.extend
  • ${ }的特别功能
  • (JS基础)String 类型
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (第27天)Oracle 数据泵转换分区表
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • (轉貼) UML中文FAQ (OO) (UML)
  • (轉貼) 蒼井そら挑戰筋肉擂台 (Misc)
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .bashrc在哪里,alias妙用
  • .htaccess 强制https 单独排除某个目录
  • .NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库
  • .net Signalr 使用笔记
  • .NET 使用 XPath 来读写 XML 文件
  • .Net 中Partitioner static与dynamic的性能对比
  • .netcore 如何获取系统中所有session_如何把百度推广中获取的线索(基木鱼,电话,百度商桥等)同步到企业微信或者企业CRM等企业营销系统中...
  • .NET教程 - 字符串 编码 正则表达式(String Encoding Regular Express)
  • .skip() 和 .only() 的使用