Rman日常备份
使用方式:
编辑脚本
vi /home/oracle/dba/ora_backup.sh
插入以下内容
#!/bin/bash
##环境变量配置
##author yangshuDBA
source ~/.bash_profile
export NLS_DATE_FORMAT='yyyymmdd hh24:mi:ss';
BK_DATE=`date +%Y%m%d`
IPADDR=$(hostname -I | awk '{print $1}')
BAKPATH=/rman/${IPADDR}/$ORACLE_SID
CURPATH=$BAKPATH/${BK_DATE}
LOGDIR=${BAKPATH}/logs
SYSNAME='租赁系统'
DBBackStatus=''
DB_TYPE='Oracle'
MD5_FILE=${CURPATH}/${BK_DATE}.md5
if [ ! -d "${BAKPATH}" ]; then
mkdir -p "${BAKPATH}"
fi
if [ ! -d "${CURPATH}" ]; then
mkdir -p "${CURPATH}"
fi
if [ ! -d "${LOGDIR}" ]; then
mkdir -p "${LOGDIR}"
fi
##全备份
function RMAN_FULL_BACKUP() {
TAG=${BK_DATE}_FULL
touch ${LOGDIR}/Full_${BK_DATE}.log
rman target / log=${LOGDIR}/Full_${BK_DATE}.log<<!
run{
allocate channel d1 device type disk;
allocate channel d2 device type disk;
allocate channel d3 device type disk;
allocate channel d4 device type disk;
sql 'alter system archive log current';
sql 'alter system checkpoint';
backup as compressed backupset incremental level=0 database format '${CURPATH}/%d_Full_0_%s_%t' tag '${TAG}';
sql 'alter system archive log current';
sql 'alter system archive log current';
sql 'alter system archive log current';
sql 'alter system checkpoint';
backup as compressed backupset archivelog all format '${CURPATH}/%d_Arch_%s_%t' not backed up 1 times tag '${TAG}';
backup spfile format '${CURPATH}/%d_SP_%s_%t' tag '${TAG}';
backup current controlfile format '${CURPATH}/%d_C_%s_%t' tag '${TAG}';
release channel d1;
release channel d2;
release channel d3;
release channel d4;
}
!
}
##增量备份
function RMAN_INCR_BACKUP() {
TAG=${BK_DATE}_Incr
touch ${LOGDIR}/Incr_${BK_DATE}.log
rman target / log=${LOGDIR}/Incr_${BK_DATE}.log<<!
run{
allocate channel d1 device type disk;
allocate channel d2 device type disk;
allocate channel d3 device type disk;
allocate channel d4 device type disk;
sql 'alter system archive log current';
sql 'alter system checkpoint';
backup as compressed backupset incremental level=1 database format '${CURPATH}/%d_incr_0_%s_%t' tag '${TAG}';
sql 'alter system archive log current';
sql 'alter system checkpoint';
backup as compressed backupset archivelog all format '$CURPATH/%d_Arch_%s_%t' not backed up 1 times tag '${TAG}';
backup spfile format '$CURPATH/%d_SP_%s_%t' tag '${TAG}';
backup current controlfile format '$CURPATH/%d_C_%s_%t' tag '${TAG}';
release channel d1;
release channel d2;
release channel d3;
release channel d4;
}
!
}
function RMAN_DELETE_OLD() {
touch ${LOGDIR}/DelLog_${BK_DATE}.log
rman target / log=${LOGDIR}/DelLog_${BK_DATE}.log<<!
crosscheck archivelog all;
crosscheck backupset;
delete noprompt expired backup;
delete noprompt expired archivelog all;
delete noprompt backup completed before 'sysdate-8';
delete noprompt force archivelog all completed before 'sysdate-2';
list backup summary;
exit
!
}
function CALCULATE_MD5() {
if [ ! -f "${MD5_FILE}" ]; then
touch "${MD5_FILE}"
fi
find ${CURPATH}/* -type f -exec md5sum {} \; | sort -k 2 > ${MD5_FILE}
}
function SEND_JOB_STATUS(){
#写入备份结果至管理主机数据库
/var/opt/mysql/bin/mysql -udba -p'PASSWORD' -h192.168.1.61 -P3310 --ssl-mode=DISABLED -e "insert into db_backup.t_dbbackup_info(ip,db_type,status,datadir,logdir,md5file,system_name)values('${IPADDR}','${DB_TYPE}','${DBBackStatus}','${CURPATH}','${LOGDIR}','${MD5_FILE}','${SYSNAME}');"
}
function MAIN_JOB() {
day=$(date +%A)
# if [ "$day" = "Saturday" ]; then
#备份等级判断及备份状态判断
if [ "$day" = "Saturday" ]; then
echo "Today is Saturday";
RMAN_FULL_BACKUP
DBBackStatus=$(grep "ORA-" ${LOGDIR}/Full_${BK_DATE}.log |wc -l)
else
echo "Todat is not Saturday"
RMAN_INCR_BACKUP
DBBackStatus=$(grep "ORA-" ${LOGDIR}/Incr_${BK_DATE}.log |wc -l)
fi
RMAN_DELETE_OLD
CALCULATE_MD5
DBBackStatus=$((${DBBackStatus} + $(grep "ORA-" ${LOGDIR}/DelLog_${BK_DATE}.log | wc -l)))
#发送报警信息至数据库管理平台
if [ ${DBBackStatus} -gt 0 ]; then
echo "DBBackStatus is greater than 0"
DBBackStatus='fail'
else
echo "DBBackStatus is not greater than 0"
DBBackStatus='OK'
fi
SEND_JOB_STATUS
}
MAIN_JOB
添加执行权限
chmod 755 /home/oracle/dba/ora_backup.sh
增加计划任务
echo "30 0 * * * /home/oracle/dba/ora_backup.sh" >> /var/spool/cron/oracle