#!/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
将函数结果输出到文件