脚本详细
1、提前修改了冗余度为2(configure retention policy to redundancy 2;)
2、备份策略为周日0级备份,其它周一~周六1级备份
[oracle@cxl]$ chmod +x /data/rman_bak/rman_job.sh
[oracle@cxl]$ cat /data/rman_bak/rman_job.sh
#!/bin/bash
echo "设置环境变量"
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/19.0.0.0/dbhome_1
export ORACLE_SID=cxldb2
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
export PATH=$ORACLE_HOME/bin:$PATH
echo "设置变量参数"
WEEK_DAILY=`date +%w` #输出当前为星期几:周日为0
DATE_2=`date +%Y%m%d` #输出当前日期戳
BACKUP_PATH="/data/rman_bak"
BIN=$ORACLE_HOME/bin
#判断登录执行用户是否为oracle用户,并记录到日志中
if [ $USER = "oracle" ]
then
echo "当前用户是oracle,可以继续!"
else
echo "!!!当前用户不是oracle,请使用oracle用户执行本备份脚本,程序将退出!!!"
exit
fi
################################### 备份策略1(二选一) ###############################
# #
# 说明:每周日做level=0备份,其他所有均做level=1备份 #
# 比如:如果需要恢复周五的数据,需要周日的level=0备份和周一到周五的5份level=1备份 #
# 策略:每周日进行0级备份,其他时间为1级备份 #
#######################################################################################
#-eq是== 判断等于0 则level=0 否则level=0
if [ ${WEEK_DAILY} -eq 0 ]
then
LEVEL=0
else
LEVEL=1
fi
export LEVEL=${LEVEL}
echo "今天是星期$LEVEL"
#如果$LEVEL = 0执行0级备份
if [[ $LEVEL = 0 ]]; then
export ORACLE_SID=cxldb2
#$BIN/rman log $BACKUP_PATH/logs/level.$ORACLE_SID.$LEVEL.$DATE_2.log
rman target / <<EOF>>/data/rman_bak/logs/level.$LEVEL.$ORACLE_SID.$DATE_2.log
#单独备份归档日志到某一目录
run{
allocate channel ch1 type disk;
allocate channel ch2 type disk;
crosscheck backupset of archivelog all;
backup archivelog all format '$BACKUP_PATH/archive/archlog.%d.level.$LEVEL.%U_%T' delete all input;
delete noprompt expired backupset of archivelog all;
release channel ch1;
release channel ch2;
}
#备份数据文件、参数文件、控制文件,且filesperset=10
run{
allocate channel ch1 type disk;
allocate channel ch2 type disk;
crosscheck backupset of database;
backup incremental level $LEVEL database filesperset 10 format '$BACKUP_PATH/data/data.%d.level.$LEVEL.%U_%T';
backup spfile tag='spfile' format '$BACKUP_PATH/data/spfile_%U_%T';
backup current controlfile tag='control' format='$BACKUP_PATH/data/control_%U_%T';
delete noprompt expired backupset of database;
delete noprompt obsolete;
release channel ch1;
release channel ch2;
}
exit;
EOF
echo "RMAN LEVEL:$LEVEL 备份完成!"
#负责执行1级备份
else
export ORACLE_SID=cxldb2
#$BIN/rman log $BACKUP_PATH/logs/level.$LEVEL.$ORACLE_SID.$DATE_2.log
rman target / <<EOF>>/data/rman_bak/logs/level.$LEVEL.$ORACLE_SID.$DATE_2.log
run{
allocate channel ch1 type disk;
allocate channel ch2 type disk;
crosscheck backupset of archivelog all;
backup archivelog all format '$BACKUP_PATH/archive/archlog.%d.level.$LEVEL.%U_%T' delete all input;
delete noprompt expired backupset of archivelog all;
release channel ch1;
release channel ch2;
}
run{
allocate channel ch1 type disk;
allocate channel ch2 type disk;
crosscheck backupset of database ;
backup incremental level $LEVEL database filesperset 10 format '$BACKUP_PATH/data/data.%d.level.$LEVEL.%U_%T';
backup spfile tag='spfile' format '$BACKUP_PATH/data/spfile_%U_%T';
backup current controlfile tag='control' format='$BACKUP_PATH/data/control_%U_%T';
delete noprompt expired backupset of database ;
delete noprompt obsolete ;
release channel ch1;
release channel ch2;
}
exit;
EOF
echo "RMAN LEVEL:$LEVEL 备份完成!"
fi
#保存退出
[oracle@cxl]$ crontab -e
#设置好定时任务
附