db2巡检脚本解读

#!/bin/sh 
####################
### Example:
### Please excute the scripts use db2 instance user
### sh db2_collect_linux.sh <DB_NAME> 
####################

这里为注释

DB_NAME=$1

库名从这里传入

HOST_IP=$(grep -v "#" /etc/hosts|grep `hostname`|sort|head -1|awk '{print $1}')

通过hosts获取HOST_IP

file=/tmp/sysinfo-`uname`-`hostname`-${HOST_IP}-`whoami`-${DB_NAME}-`date +%Y%m%d`.log
>$file
chmod 777 $file

给出日志文件名并修改权限

script_begin(){
        echo ""
        echo "[Script started at: `date` on `hostname`]"
        echo "#######################################################################################"
        echo ""
}

脚本开始函数,打出日期和主机名信息,表示脚本开始执行

run(){
        echo "#######################################################################"
        echo "#$1"
        echo "#[COMMAND START]"
        echo ""
        echo "$1"|sh
        echo ""
        echo "#[COMMAND END]"
        echo ""
        echo ""
}

run函数,主要运行命令的函数,通过传入参数,使用循环将操作简化

data_collect(){
        script_begin
        echo "####################################### OS info ##################################";echo ""
        run "ifconfig -a"
        run "hostname"
        run "vmstat -w 5 3"
        run "iostat 5 3"
        run "free -m"
        run "df -h"
        run "cat /etc/hosts"
        run "cat /etc/passwd"
        run "cat /etc/group"
        run "cat /etc/services|grep -i db2"

这里检查系统的一些基础信息
网卡信息
主机名
虚拟内存
IO情况
内存情况
硬盘空间情况
主机名
密码文件
用户组文件
db2服务


        echo "####################################### instance name #######################################";echo ""
        run "db2ilist"
        run "id"

运行db2ilist命令,可以查看实例名
运行id命令,可以查看用户以及用户组等信息

        echo "####################################### database license info #######################################";echo ""
        run "db2licm -l"

运行db2licm -l查看许可证是否是永久的

        echo "####################################### database version #######################################";echo ""
        run "db2level"

运行db2level查看版本

        echo "####################################### operation system version #######################################";echo ""
        run "cat /etc/redhat-release"
        run "uname -a"

运行uname-a和cat /etc/redhat-release查看操作系统版本

        echo "####################################### db2diag info #######################################";echo ""
        db2diag -H 3d

运行db2diag -H 3d显示近三天日志

        echo "####################################### db2diag abnormal info #######################################";echo ""
        db2diag -H 4d -l Warning,Error,Severe

运行db2diag -H 4d -l Warning,Error,Severe筛选最近四天的错误信息

        echo "####################################### instance configure #######################################";echo ""
        run "db2 get dbm cfg"

运行db2 get dbm cfg查看数据库管理器配置

        echo "####################################### catalog information #######################################";echo ""
        run "db2 list node directory"
        run "db2 list db directory"

运行db2 list node directory查看db2的节点信息
运行db2 list db directory查看db2的实例信息

        echo "####################################### instance user enviroment#######################################";echo ""
        run "cat ~/.bash_profile"

运行cat ~/.bash_profile查看环境变量

        echo "####################################### db2set information #######################################";echo ""
        run "db2set -all"

运行db2set -all查看db2实例级别的参数

        echo "####################################### crontab#######################################";echo ""
        run "crontab -l"

运行crontab -l查看db2用户的定时任务

        echo "####################################### ulimit#######################################";echo ""
        run "ulimit -a"

运行ulimit -a查看db2用户进程资源限制

        echo "####################################### database configure #######################################";echo ""
        run "db2 get db cfg for ${DB_NAME}"

查看传入库名的所有参数

        echo "####################################### backup history info#######################################";echo ""
        db2 list history backup all for ${DB_NAME}

查看传入库名历史备份记录

        echo "####################################### load history info#######################################";echo ""
        db2 list history load all for ${DB_NAME}

查看传入库名的LOAD记录

        echo "####################################### reorg history info#######################################";echo ""
        db2 list history reorg all for ${DB_NAME}

查看传入库名的重组记录,重组类似于Oracle的shrink和rebuild

        db2 connect to ${DB_NAME}

使用db2 connect to ${DB_NAME} 连接到数据库中

        echo "####################################### table status info#######################################";echo ""
        db2 "select substr(TABSCHEMA,1,20) as TABSCHEMA,substr(TABNAME,1,50) as TABNAME ,status from syscat.tables where status<>'N'"

从 syscat.tables 系统目录中检索出所有状态不是 ‘N’ 的表的schema和表名

        echo "####################################### invalid view info#######################################";echo ""
        db2 "SELECT substr(VIEWSCHEMA,1,30) as VIEWSCHEMA, substr(VIEWNAME,1,50) as VIEWNAME ,VALID FROM  syscat.views AS v where VALID <> 'Y' "

从 syscat.views中查询状态不是Y的视图模式和视图名

        echo "####################################### invalid packages info#######################################";echo ""
        db2 "SELECT substr(PKGSCHEMA,1,30) as PKGSCHEMA, substr(PKGNAME,1,50) as PKGNAME ,VALID FROM  syscat.packages AS v where VALID <> 'Y' "

从syscat.packages中查询状态不是Y的包模式和包名

        echo "#######################################Top 10 slow SQL info#######################################";echo ""
        db2 "SELECT rows_read / (num_executions + 1) as avg_rows_read, rows_written / (num_executions + 1) as avg_rows_written, stmt_sorts / (num_executions + 1) as avg_sorts, cast(round(cast(total_exec_time as float)/(num_executions + 1),2) as decimal(10,2)) as avg_exec_time , substr(stmt_text,1,1000) as SQL_Stmt FROM SYSIBMADM.SNAPDYN_SQL ORDER BY avg_exec_time desc fetch first 10 rows only"

根据SYSIBMADM.SNAPDYN_SQL查询耗时最长的十个SQL

        echo "####################################### Top 10 sort SQL info#######################################";echo ""
        db2 "select substr(stmt_text,1,500) as stmt_text,stmt_sorts from sysibmadm.top_dynamic_sql order by stmt_sorts desc fetch first 10 rows only "

根据sysibmadm.top_dynamic_sql查询排序次数最多的十个SQL

        echo "####################################### Top 10 CPU TIME SQL info#######################################";echo ""
        db2 "select substr(stmt_text,1,500) as stmt_text ,total_usr_cpu_time from sysibmadm.snapdyn_sql order by total_usr_cpu_time desc fetch first 10 rows only"

根据sysibmadm.snapdyn_sql查询CPU耗时最长的十个SQL

        echo "####################################### DB SIZE info #######################################";echo ""
        db2 "call get_dbsize_info(?,?,?,0)"     

获取数据库占用大小

        echo "####################################### SQL monitor #######################################";echo ""
        db2 "call monreport.currentsql()"

生成当前SQL活动的报告

        echo "####################################### partition tables#######################################";echo ""
        db2 "select substr(tabschema,1,20) as tabschema,substr(tabname,1,50) as tabname ,DATAPARTITIONNAME,LOWVALUE,HIGHVALUE from syscat.datapartitions  where tabname in (select tabname from syscat.datapartitions group by tabname having count(*) >1) order by tabname"

根据 syscat.datapartitions检索分区信息

        echo "####################################### maxsize tables limit 10#######################################";echo ""
        db2 "select ad.tabschema,ad.tabname,sum(ta.card) sum_card ,sum(data_object_p_size+index_object_p_size+long_object_p_size+lob_object_p_size+xml_object_p_size)/1024 as total_p_size from sysibmadm.admintabinfo ad,sysibm.systables ta where ad.tabschema=ta.creator and ad.tabname=ta.name and ad.tabname in (select tabname from syscat.tables where tabschema not in ('SYSCAT','SYSIBM','SYSIBMADM','SYSPUBLIC','SYSSTAT','SYSTOOLS')) group by ad.tabschema,ad.tabname order by total_p_size desc fetch first 10 rows only"      

根据 sysibmadm.admintabinfo 和 sysibm.systables查出最大的十个表

        echo "####################################### db2pd information #######################################";echo ""        
        run "db2pd -edus"

查询所有edu信息

        run "db2mtrk -i -p -v -d "

获取DB2实例中的线程、进程、缓冲池性能、锁等信息

        run "db2pd -dbptnmem "

查看数据库分区内存使用情况

        run "db2pd -ha"

查看当前HA状态

        run "db2pd -db  ${DB_NAME}  -memset"

查看内存设置信息

        run "db2pd -db  ${DB_NAME}  -mempool"

查看内存池信息

        run "db2pd -db  ${DB_NAME}  -bufferpools"

查看缓冲池信息

        run "db2pd -db  ${DB_NAME}  -tablespace"

查看表空间信息

        run "db2pd -db  ${DB_NAME}  -lock"

查看持有锁的信息

        run "db2pd -db  ${DB_NAME}  -wlock"

查看等待锁信息

        run "db2pd -db  ${DB_NAME}  -logs"

查看日志组情况

        run "db2pd -db  ${DB_NAME}  -appl"

查看连接数据库的应用信息

        run "db2pd -db  ${DB_NAME}  -transa"

查看事务信息

        run "db2pd -db  ${DB_NAME}  -apinfo"

查看连接数据库的应用信息,同appl

        run "db2pd -db  ${DB_NAME}  -agent"

查看代理信息

        run "db2pd -db  ${DB_NAME}  -dynamic"

查看动态SQL信息

        run "db2pd -db  ${DB_NAME}  -tcbstat"

查看线程控制块信息

        run "db2pd -db  ${DB_NAME}  -reorg"

查询重组信息

        run "db2pd -db  ${DB_NAME}  -hadr"

查询HA信息

        run "db2 get snapshot for database manager          "

查询数据库管理器快照信息

        run "db2 get snapshot for database on ${DB_NAME}    "

获取数据库快照信息

        run "db2 get snapshot for applications on ${DB_NAME}"

获取应用信息的快照

        run "db2 get snapshot for tables on ${DB_NAME}      "

获取表的快照信息

        run "db2 get snapshot for tablespaces on ${DB_NAME} "

获取表空间的快照信息

        run "db2 get snapshot for locks on ${DB_NAME}       "

获取锁的快照信息

        run "db2 get snapshot for bufferpools on ${DB_NAME} "

获取内存池的快照信息

        run "db2 get snapshot for dynamic sql on ${DB_NAME} "

获取动态sql的快照信息

        echo "####################################### completed #####################################";echo ""
}


data_collect >$file 2>&1

获取锁的快照信息

        run "db2 get snapshot for bufferpools on ${DB_NAME} "

获取内存池的快照信息

        run "db2 get snapshot for dynamic sql on ${DB_NAME} "

获取动态sql的快照信息

        echo "####################################### completed #####################################";echo ""
}


data_collect >$file 2>&1

将函数结果输出到文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值