【环境介绍】
系统环境:Linux + shell
【背景描述】
需求:由于数据库维护较多同时涉及较多的系统类型,对于不熟悉系统的同事来说,及时登录一些数据库显然是需要时间,登录虽然简单,先查到信息再登录系统,显然会降低效率。为了解决这个问题,同事建议是否能写个脚本,能比较方便的登录系统。
对于这个问题,考虑的问题如下:
1, 从一台主机登录多台主机,相当于跳转服务器,网络上一定要互通;
2, 根据不同业务的系统划分列表信息;
3, 涉及到资产列表信息,服务器的安全性一定要高。
结果:之前申请了一台专门监控的服务器,用于提取周报信息。刚好能满足这个条件。
【针对性设计结构】
1, 显示信息的方式,根据业务系统不同显示信息;---根据比多的业务域分类
2, 登录服务器的方式选择,多个节点登录;---能选择性的多个节点登录,例如RAC
3, 使用哪个用户登录。---考虑到也有单机主机,决定用Oracle用户登录
经过对上面的问题考虑,决定用Oracle用户根据不同系统可多个节点选择登录。最终结果如下:
主要信息列表文件:
主要功能输出信息:
主要实现功能的部分脚本如下:
#!/bin/sh
######################################################################
# login3.sh
# This script is conn db hosts instance
# Author CZT
######################################################################
function connectdb() 》》》主要实现输出主机信息的函数
{
title=`cat ${list_dest}|head -1`
result=`cat ${list_dest}|grep -i ${Dbname}`
echo "+---------------+---------------+---------------+---------------+---------------+-----+"
printf "|"
printf "%-15s|" $title
printf "\n"
echo "+---------------+---------------+---------------+---------------+---------------+-----+"
printf "|"
printf "%-15s|" $result
printf "\n"
echo "+---------------+---------------+---------------+---------------+---------------+-----+" v_instancenum=4
read -p "Enter host instancenum:" v_instance
while [ ! $v_instance ]
do
read -p "Enter host instancenum:" v_instance
done
if [[ $v_instance =~ "^[1-2]*$" ]]
then
v_instancenum=$[$v_instancenum+$v_instance]
dbip=`cat ${list_dest}|grep -i ${Dbname}|awk ‘{print $"‘$v_instancenum‘"}‘`
echo "Note:You are current try to connect "$Dbname$v_instance
ssh $dbip
else
echo "Note:You are current try to connect "$Dbname$v_instance" does not exist,Please enter the right instancenum!!!"
fi
}
list_dest=‘/home/oracle/tmp/liebiao.txt‘ 》》》创建不同业务域系统的列表数组
LISTS="$(cat /home/oracle/tmp/xitong.txt) QUIT" 》》》创建不同系统的列表数组
echo "+-------------------------------+This is the system list+---------------------------------------+"
select Dest in $LISTS;do 》》》创建不同业务域系统的列表数组
case $Dest in
"CRM") 》》》CRM业务域系统选项信息
DB="$(cat /home/oracle/tmp/CRMDB.TXT) QUIT"
echo "+--------------------------------+This is the $Dest db list+-------------------------------+"
select Dbname in $DB;do
case $Dbname in
"YYDB") 》》》营业数据库系统信息
connectdb $Dbname; 》》》调用第一步涉及的connectdb函数输出信息
;;
"GGDB")
connectdb $Dbname;
;;
"DZQD")
connectdb $Dbname;
;;
"QUIT")
echo "Note:You are quit of the option!"
break;
;;
esac
done;
;;
"QUIT") 》》》选择退出时,退出
echo "Ignorant"
break;
;;
esac
done;
【问题思考】
1, 总体实现的思路逻辑是比较简单,但是功能确实比较实用,特别适用于不熟悉系统的同事,脚本同时也实现其他库,比如测试库,开发库进行扩展;
2, 对于网络这段时间出现的问题由于权限限制,无法解决,有些数据库还是需要手动登录;
3, 对于输出信息的显示也是非常重要,参考MySQL的输出信息格式,花了不少时间进行调整,用户体验也是非常重要的一个关注点;
4, 对于用户密码安全性问题,尽量使用加密的方法进行对密码加密。
【总结】:
1, 根据实际情况,根据需求一定要仔细罗列一下逻辑思路,必会事半功倍;
2, 涉及比较多的主机信息时,写些小程序对工作的效率也是非常有效提高的;
关于资产安全信息一定评估好,对于数据库而言数据安全是必不可少的重要环节。