#------------------------------------------------------#
# function: backup for db2
# creator: fjz
# date: 20141225
#------------------------------------------------------#
#------------------------------------------------------#
# init for special db
#------------------------------------------------------#
i_date=`date +'%Y%m%d%H%M'`
#对于不同的数据库,修改以下5个参数即可
i_archlog=/archlog/db2srp/SRPDB/NODE0000/LOGSTREAM0000/C0000000
DB_SRV_IP="10.242.0.210" # 浮动IP地址
i_inst=db2srp # DB2 Instance Name
i_dbnm=SRPDB # Database Name
i_basedir=/archlog/cvbackup # backup base dir
#
i_db_flag=0 # 1:backup db; 0:not backup db
i_log_flag=1 # 1:backup archivelog; 0:not backup archivelog
ARCHIVELOG_COUNTS=5 # numbers of archivelog greater than ARCHIVELOG_COUNTS,then backup
KEEP_BACKUP_NUMS=0 # keep KEEP_BACKUP_NUMS of backup
i_cvbackup=$i_basedir/${i_dbnm} # dir of tar for cvbackup to tape
i_log=$i_basedir/scripts/${i_dbnm}_backup.log # operation log
i_logbakdir=${i_dbnm}_ARCHLOG_${i_date} # dir of tar for everyday
#----------------------------------------------------------#
# 函数名: rm_dir
# 用法 : rm_dir /cvbackup/testdb 2
# 功能 : 保留最新的几个文件或目录
#----------------------------------------------------------#
function rm_dir {
i_dir=$1
i_keep=$2
if [ ! -d $i_dir ]
then
echo "-->!!ERROR dir $i_cvbackup not exists" >> $i_log
exit 0
fi
cd $i_dir
echo "-->rm old file of $i_dir (KEEP_BACKUP_NUMS=$i_keep):" >> $i_log
i_cnt=0
for i in `ls -t`
do
{
if [ $i_cnt -ge $i_keep ]
then
echo "-->rm:$i" >> $i_log
rm -rf $i
fi
i_cnt=`expr $i_cnt + 1`
}
done
} # end rm_dir define
#------------------------------------------------------#
# begin backup special db
#------------------------------------------------------#
srv_ip=`/usr/sbin/ifconfig -a | grep "$DB_SRV_IP" | cut -d" " -f2`
nowtime=`date +'%Y-%m-%d %H:%M:%S'`
echo "#-----------------------------------------------------------------#" >> $i_log
if [ "$srv_ip" = "$DB_SRV_IP" ]
then
echo "-->$nowtime server_ip=$DB_SRV_IP" >> $i_log
else
echo "-->!!ERROR $nowtime server_ip=$DB_SRV_IP not exist!!" >> $i_log
exit 0
fi
#------------------------------------------------------#
# clean old backup file
#------------------------------------------------------#
[ ! -d $i_cvbackup ] && mkdir -p $i_cvbackup
[ "$i_db_flag" = "1" ] && rm_dir $i_cvbackup $KEEP_BACKUP_NUMS
[ "$i_log_flag" = "1" ] && rm_dir $i_cvbackup $KEEP_BACKUP_NUMS
#------------------------------------------------------#
# backup db
#------------------------------------------------------#
nowtime=`date +'%Y-%m-%d %H:%M:%S'`
if [ "$i_db_flag" = "1" ]
then
echo "--> $nowtime begin backup $i_dbnm !" >> $i_log
db2 "backup db $i_dbnm online to $i_cvbackup compress include logs" >> $i_log
nowtime=`date +'%Y-%m-%d %H:%M:%S'`
echo "> $i_log
fi
#------------------------------------------------------#
# mv inactive archive log for cvbackup to tape
#------------------------------------------------------#
nowtime=`date +'%Y-%m-%d %H:%M:%S'`
if [ "$i_log_flag" = "0" ]
then
echo "-->!!ERROR $nowtime not backup archivelog for database $i_dbnm" >> $i_log
exit 0
fi
#------------------------------------------------------#
# archivelog counts greater than ARCHIVELOG_COUNTS,then backup
#------------------------------------------------------#
if [ ! -d ${i_archlog} ]
then
echo "-->!!ERROR $nowtime archive log $i_archlog not exist!!" >> $i_log
exit 0
fi
i_log_count=`ls $i_archlog/*.LOG | wc -l`
i_log_count=`echo $i_log_count`
if [ $i_log_count -le $ARCHIVELOG_COUNTS ]
then
echo "-->!!INFO $nowtime archivelog (counts=$i_log_count) less than $ARCHIVELOG_COUNTS,backup archivelog next time" >> $i_log
exit 0
else
echo "-->!!INFO $nowtime archivelog (counts=$i_log_count) greater than $ARCHIVELOG_COUNTS,begin backup archivelog" >> $i_log
fi
#------------------------------------------------------#
# if first active log is S0000000.LOG, then exit
#------------------------------------------------------#
i_first_active_log=`db2 get db cfg for $i_dbnm | grep -i "first active" | awk '{print $6}'`
i_first_active_log_num=`echo $i_first_active_log |cut -d'.' -f1 | sed s/S//g |sed s/^0*//g`
if [ "${i_first_active_log_num}X" = "X" ]
then
echo "-->!!WARNING first active log is $i_first_active_log ,not tar!"
exit 0
fi
nowtime=`date +'%Y-%m-%d %H:%M:%S'`
echo "-->$nowtime first_active_log=$i_first_active_log--" >> $i_log
#--current path must be in $i_archlog--#
cd $i_archlog
#--create dir of tar everyday--#
[ ! -d $i_logbakdir ] && mkdir $i_logbakdir
for i_arch in `ls *.LOG`
do
{
i_arch_log_num=`echo $i_arch |cut -d'.' -f1 | sed s/S//g |sed s/^0*//g`
#--do with log S0000000.LOG--#
[ "${i_arch_log_num}X" = "X" ] && i_arch_log_num=0
if [ $i_arch_log_num -lt $i_first_active_log_num ]
then
echo "-->$i_arch archive and delete" >> $i_log
mv $i_arch $i_logbakdir
else
echo "-->$i_arch_log_num:$i_arch active! " >> $i_log
fi
}
done
mv $i_logbakdir $i_cvbackup
i_result=$?
nowtime=`date +'%Y-%m-%d %H:%M:%S'`
echo "-->$nowtime mv $i_logbakdir to $i_cvbackup res=$i_result" >> $i_log
[ ! $i_result -eq 0 ] && echo "-->!!ERROR mv,please check archivelog!" >> $i_log
exit 0
# function: backup for db2
# creator: fjz
# date: 20141225
#------------------------------------------------------#
#------------------------------------------------------#
# init for special db
#------------------------------------------------------#
i_date=`date +'%Y%m%d%H%M'`
#对于不同的数据库,修改以下5个参数即可
i_archlog=/archlog/db2srp/SRPDB/NODE0000/LOGSTREAM0000/C0000000
DB_SRV_IP="10.242.0.210" # 浮动IP地址
i_inst=db2srp # DB2 Instance Name
i_dbnm=SRPDB # Database Name
i_basedir=/archlog/cvbackup # backup base dir
#
i_db_flag=0 # 1:backup db; 0:not backup db
i_log_flag=1 # 1:backup archivelog; 0:not backup archivelog
ARCHIVELOG_COUNTS=5 # numbers of archivelog greater than ARCHIVELOG_COUNTS,then backup
KEEP_BACKUP_NUMS=0 # keep KEEP_BACKUP_NUMS of backup
i_cvbackup=$i_basedir/${i_dbnm} # dir of tar for cvbackup to tape
i_log=$i_basedir/scripts/${i_dbnm}_backup.log # operation log
i_logbakdir=${i_dbnm}_ARCHLOG_${i_date} # dir of tar for everyday
#----------------------------------------------------------#
# 函数名: rm_dir
# 用法 : rm_dir /cvbackup/testdb 2
# 功能 : 保留最新的几个文件或目录
#----------------------------------------------------------#
function rm_dir {
i_dir=$1
i_keep=$2
if [ ! -d $i_dir ]
then
echo "-->!!ERROR dir $i_cvbackup not exists" >> $i_log
exit 0
fi
cd $i_dir
echo "-->rm old file of $i_dir (KEEP_BACKUP_NUMS=$i_keep):" >> $i_log
i_cnt=0
for i in `ls -t`
do
{
if [ $i_cnt -ge $i_keep ]
then
echo "-->rm:$i" >> $i_log
rm -rf $i
fi
i_cnt=`expr $i_cnt + 1`
}
done
} # end rm_dir define
#------------------------------------------------------#
# begin backup special db
#------------------------------------------------------#
srv_ip=`/usr/sbin/ifconfig -a | grep "$DB_SRV_IP" | cut -d" " -f2`
nowtime=`date +'%Y-%m-%d %H:%M:%S'`
echo "#-----------------------------------------------------------------#" >> $i_log
if [ "$srv_ip" = "$DB_SRV_IP" ]
then
echo "-->$nowtime server_ip=$DB_SRV_IP" >> $i_log
else
echo "-->!!ERROR $nowtime server_ip=$DB_SRV_IP not exist!!" >> $i_log
exit 0
fi
#------------------------------------------------------#
# clean old backup file
#------------------------------------------------------#
[ ! -d $i_cvbackup ] && mkdir -p $i_cvbackup
[ "$i_db_flag" = "1" ] && rm_dir $i_cvbackup $KEEP_BACKUP_NUMS
[ "$i_log_flag" = "1" ] && rm_dir $i_cvbackup $KEEP_BACKUP_NUMS
#------------------------------------------------------#
# backup db
#------------------------------------------------------#
nowtime=`date +'%Y-%m-%d %H:%M:%S'`
if [ "$i_db_flag" = "1" ]
then
echo "--> $nowtime begin backup $i_dbnm !" >> $i_log
db2 "backup db $i_dbnm online to $i_cvbackup compress include logs" >> $i_log
nowtime=`date +'%Y-%m-%d %H:%M:%S'`
echo "> $i_log
fi
#------------------------------------------------------#
# mv inactive archive log for cvbackup to tape
#------------------------------------------------------#
nowtime=`date +'%Y-%m-%d %H:%M:%S'`
if [ "$i_log_flag" = "0" ]
then
echo "-->!!ERROR $nowtime not backup archivelog for database $i_dbnm" >> $i_log
exit 0
fi
#------------------------------------------------------#
# archivelog counts greater than ARCHIVELOG_COUNTS,then backup
#------------------------------------------------------#
if [ ! -d ${i_archlog} ]
then
echo "-->!!ERROR $nowtime archive log $i_archlog not exist!!" >> $i_log
exit 0
fi
i_log_count=`ls $i_archlog/*.LOG | wc -l`
i_log_count=`echo $i_log_count`
if [ $i_log_count -le $ARCHIVELOG_COUNTS ]
then
echo "-->!!INFO $nowtime archivelog (counts=$i_log_count) less than $ARCHIVELOG_COUNTS,backup archivelog next time" >> $i_log
exit 0
else
echo "-->!!INFO $nowtime archivelog (counts=$i_log_count) greater than $ARCHIVELOG_COUNTS,begin backup archivelog" >> $i_log
fi
#------------------------------------------------------#
# if first active log is S0000000.LOG, then exit
#------------------------------------------------------#
i_first_active_log=`db2 get db cfg for $i_dbnm | grep -i "first active" | awk '{print $6}'`
i_first_active_log_num=`echo $i_first_active_log |cut -d'.' -f1 | sed s/S//g |sed s/^0*//g`
if [ "${i_first_active_log_num}X" = "X" ]
then
echo "-->!!WARNING first active log is $i_first_active_log ,not tar!"
exit 0
fi
nowtime=`date +'%Y-%m-%d %H:%M:%S'`
echo "-->$nowtime first_active_log=$i_first_active_log--" >> $i_log
#--current path must be in $i_archlog--#
cd $i_archlog
#--create dir of tar everyday--#
[ ! -d $i_logbakdir ] && mkdir $i_logbakdir
for i_arch in `ls *.LOG`
do
{
i_arch_log_num=`echo $i_arch |cut -d'.' -f1 | sed s/S//g |sed s/^0*//g`
#--do with log S0000000.LOG--#
[ "${i_arch_log_num}X" = "X" ] && i_arch_log_num=0
if [ $i_arch_log_num -lt $i_first_active_log_num ]
then
echo "-->$i_arch archive and delete" >> $i_log
mv $i_arch $i_logbakdir
else
echo "-->$i_arch_log_num:$i_arch active! " >> $i_log
fi
}
done
mv $i_logbakdir $i_cvbackup
i_result=$?
nowtime=`date +'%Y-%m-%d %H:%M:%S'`
echo "-->$nowtime mv $i_logbakdir to $i_cvbackup res=$i_result" >> $i_log
[ ! $i_result -eq 0 ] && echo "-->!!ERROR mv,please check archivelog!" >> $i_log
exit 0
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22661144/viewspace-1477091/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/22661144/viewspace-1477091/