DB2数据库运维脚本,在不断的持续更新中

由于个人的需要,写了一份数据库运维脚本。  写本脚本的用意是:   写一个自动收集数据库信息的脚本,这个脚本能把想要的数据保存到一个表格文件 中,方便excel等图表软件的处理。这些数据可以利用图表软件和word生 成定期的 维护报告。本脚本的终极目标是自己动手...显示全部
由于个人的需要,写了一份数据库运维脚本。  写本脚本的用意是:
   写一个自动收集数据库信息的脚本,这个脚本能把想要的数据保存到一个表格文件 中,方便excel等图表软件的处理。这些数据可以利用图表软件和word生 成定期的 维护报告。本脚本的终极目标是自己动手实现数据库日常运维的自动化。
   脚本主要定时收集数据库大小、数据库缓冲池、数据库表空间、锁、排 序、应用链接、自动存储路径的信息。

欢迎大家提出宝贵建议!{:3_57:}

附件:

附件图标test.sh (11.92 KB)

附件图标DPR.zip (2.66 MB)

附件图标checker.sh (12.02 KB)

附件图标collector.sh (19.84 KB)

附件图标getevmon.ksh (1.24 KB)

附件图标getsnap.ksh (1.46 KB)

附件图标dbcheck.sh (16.83 KB)

附件图标DBA脚本.doc (89.5 KB)

附件图标ibm_db-2.0.4.1-py2.7-win-amd64.egg (421.22 KB)

收起
参与136

查看其它 80 个回答ce97的回答

ce97ce97软件开发工程师某某某
DB2维护脚本

说明:所有的脚本都是基于DB2 UDB V8.2编写的,在AIX5.3的默认SHELL下运行,如果要移植到其他操作系统需要适当调整里面的语法。

我们使用的DB2服务器工作时段都非常繁忙,使用nmon监控服务器发现CPU使用率很高,有时候还连带出现持续很高的磁盘读取。这个时候,DB2服务器在执行一条写法有问题的SQL语句或者语句访问的表缺少合适的索引,或者页面程序控制的不好允许用户多次提交导致相同的SQL重复提到服务器去执行。无论哪种情况,都需要将出问题的进程找出来,看看到底在执行什么语句,执行了多长的时间,必要的时候还需要将个别进程中断。

这次脚本就是通过db2 list application show detail命令,结合使用awk命令,将状态”UOW Waiting“或者”Connect Completed“以外的进程,找出持续运行超过若干秒的进程的AGENTID,之后用db2 get snapshot for application agent AGENTID,抓进程的快照信息。

如果大家有更好的方法或者想法,请不吝赐教。

欢迎转发试用,转贴请注明出处。谢谢!

##############################################
#snap1.sh NN
#NN 即进程持续运行某句SQL语句的秒数
#snap1.sh 15 就是抓取持续运行15秒的进程的信息

. $HOME/sqllib/db2profile
export LANG=en_US
awkfile=$HOME/mon/snap1.awk
rand=$RANDOM
tempfile=$HOME/mon/snap1.temp.$rand
idfile=$HOME/mon/snap1.id.$rand
sqlfile=$HOME/mon/snap1.sql

cd ~/mon
db2 list application show detail | grep -ivE "^$|application name|handle|-------------------------" > $tempfile
cat $tempfile |awk -v wait=$1 -v HH="$(expr `date +%H`)" -v MM="$(expr `date +%M`)" -v SS="$(expr `date +%S`)" -f $awkfile > $idfile
cat $idfile | awk '{print "get snapshot for application agentid " $1 " ;"}' > $sqlfile
#awk '{print "get snapshot for application agentid " $1 " ;"}'
db2 -tvf  $sqlfile
rm -fr $tempfile $idfile

##############################################
#snap1.awk
BEGIN {
        facmd=""  ;
#       print wait,HH,MM,SS;
}

{
id=substr($0,53,6);
ip=substr($0,64,8);
status=substr($0,144,20);
date=substr($0,175,10);
hh=substr($0,186,2);
mm=substr($0,189,2);
ss=substr($0,192,2);
db=substr($0,202,8);
#print wait,id,ip,status,date,hh,mm,ss,db,HH,MM,SS;
ts=hh*3600 + mm*60 + ss;
TS=HH*3600 + MM*60 + SS;
dbpath=substr($0,212,4);
if (dbpath ~ /home/  && status !~ /UOW Waiting/ && status !~ /Connect Completed/)
{
        ts=hh*3600 + mm*60 +ss;
        TS=HH*3600 + MM*60 +SS;
        if ( HH < hh )
        {
                TS=TS + 86400;
        }
        if ( TS - ts >= wait )
        {
                #print TS,ts,Ts-ts,wait,id,ip,status,date,hh,mm,ss,db,HH,MM,SS;
                facmd=(facmd id "\n");
                }
        }
}

END {
         printf("%s", facmd) ;
}
系统集成 · 2014-04-03
浏览1278

回答者

ce97
ce974612
软件开发工程师某某某
擅长领域: 数据库大数据中间件

ce97 最近回答过的问题

回答状态

  • 发布时间:2014-04-03
  • 关注会员:14 人
  • 回答浏览:1278
  • X社区推广