这个 RMAN 备份shell脚本用了十几年,从 Oracle 9i 到现在 19c,最早是从NBU 备份软件里喽出来的,这个版本把邮箱发送的部分删掉了。过去了这么多年,今年还收到别人给我发的备份失败的邮件,就想到了 08 年刚工作的时候,那会shell 能力也一般,也没有啥资料,当时拿到这个脚本的时候,也是改了半天,边改边测试。
#!/bin/bash
export LANG=en_US
BACKUP_DATE=`date +%d`
#RMAN_LOG_FILE=${0}.out
RMAN_LOG_FILE=/u01/scripts/dg1.rman.sh.out
TODAY=`date`
USER=`id|cut -d "(" -f2|cut -d ")" -f1`
echo "-----------------$TODAY-------------------">$RMAN_LOG_FILE
ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1
export ORACLE_HOME
RMAN=$ORACLE_HOME/bin/rman
export RMAN
ORACLE_SID=cd
export ORACLE_SID
ORACLE_USER=oracle
export ORACLE_USER
echo "ORACLE_SID: $ORACLE_SID">>$RMAN_LOG_FILE
echo "ORACLE_HOME:$ORACLE_HOME">>$RMAN_LOG_FILE
echo "ORACLE_USER:$ORACLE_USER">>$RMAN_LOG_FILE
echo "==========================================">>$RMAN_LOG_FILE
echo "BACKUP DATABASE BEGIN......">>$RMAN_LOG_FILE
echo " ">>$RMAN_LOG_FILE
chmod 666 $RMAN_LOG_FILE
WEEK_DAILY=`date +%a`
case "$WEEK_DAILY" in
"Mon")
BAK_LEVEL=0
;;
"Tue")
BAK_LEVEL=0
;;
"Wed")
BAK_LEVEL=0
;;
"Thu")
BAK_LEVEL=0
;;
"Fri")
BAK_LEVEL=0
;;
"Sat")
BAK_LEVEL=0
;;
"Sun")
BAK_LEVEL=0
;;
"*")
BAK_LEVEL=error
esac
export BAK_LEVEL=$BAK_LEVEL
echo "Today is : $WEEK_DAILY incremental level= $BAK_LEVEL">>$RMAN_LOG_FILE
RUN_STR="
BAK_LEVEL=$BAK_LEVEL
export BAK_LEVEL
ORACLE_HOME=$ORACLE_HOME
export ORACLE_HOME
ORACLE_SID=$ORACLE_SID
export ORACLE_SID
$RMAN nocatalog target / msglog $RMAN_LOG_FILE append << EOF
run
{
configure device type disk parallelism 8;
backup incremental level= $BAK_LEVEL skip inaccessible filesperset 5 Database format='/backup/cd_lev"$BAK_LEVEL"_%U_%T' tag='cd_lev"$BAK_LEVEL"';
backup archivelog all tag='arc_bak' format='/backup/arch_%U_%T' skip inaccessible filesperset 5 not backed up 1 times delete input ;
backup current controlfile tag='bak_ctlfile' format='/backup/ctl_file_%U_%T';
backup spfile tag='spfile' format='/backup/cd_spfile_%U_%T';
}
report obsolete;
delete noprompt obsolete;
crosscheck backup;
delete noprompt expired backup;
list backup summary;
EOF
"
# Initiate the command string
if [ "$CUSER" = "root" ]
then
echo "Root Command String: $RUN_STR" >> $RMAN_LOG_FILE
su - $ORACLE_USER -c "$RUN_STR" >> $RMAN_LOG_FILE
RSTAT=$?
else
echo "User Command String: $RUN_STR" >> $RMAN_LOG_FILE
/bin/sh -c "$RUN_STR" >> $RMAN_LOG_FILE
RSTAT=$?
fi
# ---------------------------------------------------------------------------
# Log the completion of this script.
# ---------------------------------------------------------------------------
if [ "$RSTAT" = "0" ]
then
LOGMSG="cndba Database backup successfully"
else
LOGMSG="cndba database backup failed with error"
fi
echo >> $RMAN_LOG_FILE
echo Script $0 >> $RMAN_LOG_FILE
echo ==== $LOGMSG on `date +%Y/%m/%d-%H:%M:%H` ==== >> $RMAN_LOG_FILE
echo >> $RMAN_LOG_FILE
版权声明:本文为博主原创文章,未经博主允许不得转载。