DB2备份全库和归档脚本

#------------------------------------------------------#
# 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 "--&gt!!ERROR dir $i_cvbackup not exists" >> $i_log
    exit 0
  fi

  cd $i_dir
  echo "--&gtrm 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 "--&gtrm:$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 "--&gt$nowtime server_ip=$DB_SRV_IP" >> $i_log
else
  echo "--&gt!!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 "--&gt $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 "--&gt!!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 "--&gt!!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 "--&gt!!INFO $nowtime archivelog (counts=$i_log_count) less than $ARCHIVELOG_COUNTS,backup archivelog next time" >> $i_log
  exit 0
else
  echo "--&gt!!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 "--&gt!!WARNING first active log is $i_first_active_log ,not tar!"
  exit 0
fi

nowtime=`date +'%Y-%m-%d %H:%M:%S'` 
echo "--&gt$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 "--&gt$i_arch archive and delete" >> $i_log
    mv $i_arch $i_logbakdir
  else
    echo "--&gt$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 "--&gt$nowtime mv $i_logbakdir to $i_cvbackup res=$i_result" >> $i_log
[ ! $i_result -eq 0 ] && echo "--&gt!!ERROR mv,please check archivelog!" >> $i_log

exit 0


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22661144/viewspace-1477091/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/22661144/viewspace-1477091/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值