使用shell脚本检测数据库连接访问情况

    最近要迁移几套环境,涉及的数据库有Oracle,MySQL,数量还不少,能够达到的目标就是整合后的服务器缩减幅度达到70%,这样一种迁移场景,就涉及到很多的网络连接情况,如果本身业务优先级高,涵盖的是全局业务,那么这个影响就会无限放大。所以对于网络连接情况的监控也尤为重要。
    其实对于这方面的内容,严格来说,DBA能够根据防火墙信息列表筛查到对应的应用服务器IP,然后交由负责的专人来负责跟进就可以了,但是这个时候因为重重原因,我要ipositive一些。这件事情就希望我能够有自己的信息,不至于到了后面,数据库迁移过去了,应用连不上去,然后大家再花一些时间来确认是之前就如此,还是因为修改不当导致。其实这种事情想想就挺闷的。
    那么我就positive一些,怎么样得到客户端的数据库连接情况呢,这个过程中就要重点关注数据库的连接情况,一种思路就是查看监听日志,另外一种思路就是抓取网络的访问情况。
我们两者结合一下,可以提前收集这些访问的信息。
简单想想,刷开膀子来干,脚本内容如下:
function get_conn_info
{
ORACLE_HOME=`cat /etc/oratab | tail -1 | awk -F: '{print $2}'`
DB_LISTEN_PORT=`grep -i PORT $ORACLE_HOME/network/admin/listener.ora|awk -F\( '{print $5}'|sed -e 's/PORT//g' -e 's/=//g' -e 's/)//g'`
for TMP_PORT in $DB_LISTEN_PORT
do
netstat -nalp|grep ESTABLISHED|awk '{print $5 "  " $4}'|grep $TMP_PORT|awk -F: '{print $4}'| sort|uniq|sed /^[[:space:]]*$/d|awk -v TMP_PORT=$TMP_PORT '{print $1" "TMP_PORT}'
done
}

get_conn_info  > conn_info.lst
while true
do
get_conn_info  > tmp_conn_info.lst
sdiff conn_info.lst tmp_conn_info.lst|grep \> |awk '{print $2" "$3}' >> diff.lst
sleep 60
done
我们从$ORACLE_HOME/network/admin下分析listener.ora,得到一个端口列表,比如1521,1522,1523等
然后拿着这些端口信息去和网络访问中的记录去做匹配,如果有匹配的记录,就记录下来,如果有新增的信息记录,就写入一个临时文件,把结果整合起来,这样得到的列表就是一个持续更新的IP信息列表,当然这个频率我根据目前的业务情况做了改变,很多连接都是长连接,有部分是短连接,所以我就把这个频率做了调整。目前是1分钟收集一次。
查看得到的连接信息列表,这样哪个端口访问的,哪台服务器都是一目了然。
$ less conn_info.lst
10.11.1.158 1522
10.11.128.169 1523
10.11.133.82 1523
10.11.2.140 1525
10.11.2.145 1526

时间: 2025-01-29 20:19:06

使用shell脚本检测数据库连接访问情况的相关文章

linux中使用shell脚本检测内存使用情况

 公司服务器最近两天老是因为内存被使用满而造成死机,实在是受不了老叫机房的人去帮忙重启,专门写了个脚本来释放下内存,当然这台服务器不是太重要,我粗鲁的处理方式估计不会适合大多数服务器,请大家使用之前先考虑清楚,不然造成数据丢失就不关我的事了. 脚本内容: cat check-mem.sh #!/bin/bash mem_total=`free -m | awk 'NR==2' | awk '{print $2}'` mem_free=`free -m | awk 'NR==3' | awk '{

使用shell脚本查看数据库负载情况(第二篇)

在之前写了一个shell脚本,能够得到一个基于时间点的数据库负载报告. 使用shell脚本查看数据库负载情况 http://blog.itpub.net/23718752/viewspace-1168027/ 在生产环境中快照的生成频率可能10分钟或者半个小时就会生成,频率要快些,使用原先的脚本执行起来会有一定的延时. 想查看在快照的时间间隔内数据库的负载情况.这样能够更高效的定位某个问题.比如10点到11点,每10分钟生成一次快照.可能问题发生在10:40~10:50,如果通过一个小时的快照就

用shell脚本检测mysql表

此脚本的主要用途是检测mysql服务器上所有的db或者单独db中的坏表. 检测完后会在/tmp 目录下生成日志文件. 检测指定数据库的效果图如下: 检查所有数据库:

使用shell脚本查看数据库负载情况

平时在查看数据库的问题时,会有种迷茫的感觉,如果没有任何人反馈问题,基本上没有主动查找问题的方向,awr,ash都是在得知问题发生的时间段或者一些时间戳来从历史记录中查找相关的信息,个人整理了如下的脚本,能够显示当天的时间段内数据库的负载信息,能够很好掌握数据库的忙闲情况. 来看一个简单的例子,比如我要查看早上6点到中午12点数据库的负载情况 脚本 showdbtime.sh 显示的是在制定的时间段内的 数据库负载的一个综合值.比如6点到7点个小时(60分钟),dbtime如果是120分钟,那么

巧用shell脚本统计磁盘使用情况

在系统环境中存在大量的文件时,统计磁盘空间的工作变得尤为重要. 首先是传统的文件统计,通常使用-s选项,但是只能得到一个概要的信息,如果想定位哪些文件消耗的空间较大还是比较麻烦的. [ora11g@rac1 new_test]$ du -s . 1296    . [ora11g@rac1 new_test]$ du -sh . 1.3M    . [ora11g@rac1 new_test]$ du -s . 1296    . 这个时候,勉强可以使用-s ./*的形式得到所有的文件夹的大小情

检测网段在线主机的shell脚本

作业四: 写一个脚本: 实现ping C类网段,B类网段和A类网段内的所有主机: 网段地址让用户输入,而且通过脚本判断网段类型: #!/bin/bash #Author: MOS #Script name: funPing.sh #Date & Time: 2012-10-09/21:53:09 #Version: 1.0.1 #Description: # #定义C类网段处理函数 net_C(){ #定义统计不在线IP数量的变量 declare -i Fail=0 #生成C类网的最后位IP,循

Linux Shell脚本实现检测tomcat_linux shell

Linux Shell脚本检测tomcat并自动重启 后台运行命令 sh xxx.sh & 查看后台任务:jobs 召唤到前台:fg jobs编号 可以删掉while循环的代码放到crontab里面定时执行,可以将脚本直接后台运行, #!/bin/bash while [ true ] do url="http://www.jb51.net/"; httpOK=`curl --connect-timeout 10 -m 60 --head --silent $url | awk

使用shell脚本实现ping对应IP所对应的人名(推荐)_linux shell

#!/bin/bash a=(张三 李四 王五 赵六) for i in {0..3} do if ping -c 1 192.168.1. $((${i}+1)) >dev/null 2>&1;then echo $((${i}+1))"号"${a[${i}]}"在线" else echo $((${i}+1))"号"${a[${i}]}"离线" fi done 这串shell代码实现了ping 某个IP

centos中shell定时检测mysqld,nginx,httpd服务脚本

前几天发现网站打不开,提示数据库连接错误,我登录linux 发现mysqld服务不知道什么时候停止了.幸好我即使发现. 于是决定写一个shell脚本每分钟自动检测mysqld服务,如果发现服务没起来就自动启动mysqld服务 也就是:通过cron定时任务执行检测脚本 编写检测脚本 /root/bin/check  代码如下 复制代码 #!/bin/bash   check=`pgrep mysql`   if [ -n "$check" ]; then         exit els