#!/bin/bash
source ~/.bash_profile
DBNAME=数据库名
ORACLE_SID=实例名
RMAN_BACKUP=备份路径
BACKUP_TYPE="INCREMENTAL LEVEL=0"
DP_TYPE=full_0
KEEP_DAYS=保留天数
#获取当前日期
CURDATE=`date +%Y%m%d`
#创建备份保存目标位置目录
BACKUP_DATA=${RMAN_BACKUP}/backup_bak/${DBNAME}/${CURDATE}
if [ ! -d ${BACKUP_DATA} ]; then
mkdir -p ${BACKUP_DATA}
fi
#创建日志路径
LOG_DATA=${RMAN_BACKUP}/backup_logs/${DBNAME}
if [ ! -d ${LOG_DATA} ]; then
mkdir -p ${LOG_DATA}
fi
BEGIN_TIME=`date`
echo "Database Name is: " $DBNAME >${LOG_DATA}/${DBNAME}_backup_${DP_TYPE}_${CURDATE}.log
echo "Backup files destination directory is :" $BACKUP_DATA>>${LOG_DATA}/${DBNAME}_backup_${DP_TYPE}_${CURDATE}.log
rman target / msglog ${LOG_DATA}/${DBNAME}_backup_${DP_TYPE}_${CURDATE}.log append <<EOF
allocate channel for maintenance type disk;
delete noprompt obsolete device type disk;
crosscheck backup;
delete noprompt expired backup;
crosscheck archivelog all;
delete noprompt expired archivelog all;
delete noprompt backupset completed before 'sysdate-${KEEP_DAYS}';
delete noprompt archivelog all completed before 'sysdate-3';
run {
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF ${KEEP_DAYS} DAYS;
configure controlfile autobackup on;
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
allocate channel c4 type disk;
crosscheck archivelog all;
change archivelog all crosscheck;
crosscheck archivelog all;
#backup as compressed backupset ${BACKUP_TYPE} format '${BACKUP_DATA}/${DBNAME}_${DP_TYPE}_%s_%p.bak' tablespace users tag='${DBNAME}_${DP_TYPE}_${CURDATE}';
#backup as compressed backupset ${BACKUP_TYPE} format '${BACKUP_DATA}/${DBNAME}_${DP_TYPE}_%d_%T_%s_%p.bak' database filesperset 3 tag='${DBNAME}_${DP_TYPE}_${CURDATE}';
backup as compressed backupset ${BACKUP_TYPE} format '${BACKUP_DATA}/${DBNAME}_${DP_TYPE}_%d_%T_%s_%p.bak' database filesperset 3 tag='${DBNAME}_${DP_TYPE}_${CURDATE}';
sql 'alter system archive log current';
sql 'alter system archive log current';
#backup as compressed backupset format '${BACKUP_DATA}/${DBNAME}_arch_%d_%T_%s_%p.bak' filesperset 5 archivelog all not backed up delete all input tag='${DBNAME}_0_archlog${CURDATE}';
backup as compressed backupset format '${BACKUP_DATA}/${DBNAME}_arch_%d_%T_%s_%p.bak' filesperset 5 archivelog all not backed up tag='${DBNAME}_0_archlog${CURDATE}';
backup current controlfile format '${BACKUP_DATA}/${DBNAME}_ctl_%d_%T_%s_%p.bak' tag='ControlFile Backup';
backup format '${BACKUP_DATA}/${DBNAME}_spfile_%d_%T_%s_%p_%I.bak' spfile;
release channel c1;
release channel c2;
release channel c3;
release channel c4;
}
list backup;
report obsolete;
delete noprompt obsolete;
exit;
EOF
#删除空目录
DEL_STR="find ${RMAN_BACKUP}/backup_files/${DBNAME}/ -mtime +${KEEP_DAYS} -exec rm -rf {} \;"
find ${RMAN_BACKUP}/backup_files/${DBNAME}/ -mtime +${KEEP_DAYS} | xargs rm -rf;
find ${RMAN_BACKUP}/backup_files/${DBNAME}/ -ctime +${KEEP_DAYS} | xargs rm -rf;
echo "Delete String:" $DEL_STR >>${LOG_DATA}/${DBNAME}_backup_${DP_TYPE}_${CURDATE}.log
echo "Backup Type is: " $BACKUP_TYPE >>${LOG_DATA}/${DBNAME}_backup_${DP_TYPE}_${CURDATE}.log
echo "Backup begin Time: " $BEGIN_TIME >>${LOG_DATA}/${DBNAME}_backup_${DP_TYPE}_${CURDATE}.log
echo "Backup finish Time: " `date` >>${LOG_DATA}/${DBNAME}_backup_${DP_TYPE}_${CURDATE}.log
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




