保姆级-rman备份策略脚本(拿走直接用)

脚本详细

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
#设置好定时任务

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DBA狗剩儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值