nocatalog 模式下的全备及增备 参数配置 设置备份信息保存时间,到规定时间就自动清除一千的备份信息。 SQL> show parameter control SQL> alter system set control_file_record_keep_time=31 scope=both; SQL> select name,value,issys_modifiable from v$parameter where name='control_file_record_keep_time'; NAME VALUE ISSYS_MOD ------------------------------ ---------- --------- control_file_record_keep_time 14 IMMEDIATE 设置rman备份保存策略 RMAN> CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 15 DAYS; mkdir -p /home/oracle/scripts cd /home/oracle/scripts 备份脚本:(参考文档1,博客 https://blog.csdn.net/tianlesoftware/article/details/5740630,感谢) (参考文档2,陈老师的生产环境脚本,感谢)(参考文档3,李老师的生产环境脚本,感谢) 此脚本只需要修改,ORACLE_SID参数,ORACLE_HOME参数,BACKUPDIR参数,即可 此脚本为全备脚本,增量备份脚本只需要两步:
将下文中# Differential incremental backup Script. 部分的注释去掉
将 BACKUP database 语句中的 INCREMENTAL LEVEL=0 和 TAG hot_db_bk_level0 参数更换为 $BACKUP_TYPE 和 $BACKUP_TAG 即可
增量备份策略为周日全备,周一至周六为一级 若想设置为012级,可自行修改为 WEEK_DAILY=`date +%a` case "$WEEK_DAILY" in "Mon") BAK_LEVEL=2 ;; "Tue") BAK_LEVEL=2 ;; "Wed") BAK_LEVEL=2 ;; "Thu") BAK_LEVEL=1 ;; "Fri") BAK_LEVEL=2 ;; "Sat") BAK_LEVEL=2 ;; "Sun") BAK_LEVEL=0 ;; "*") BAK_LEVEL=error esac 脚本内容如下: vi rman_backup.sh ############################################################################# ## hot_database_backup.sh ## ## created by hongrun.jiang ## ## 2020-6-5 ## ############################################################################# #!/bin/sh ORACLE_SID= ORACLE_HOME= BACKUPDIR= # --------------------------------------------------------------------------- # Put output in <this file name>.log. Change as desired. # Note: output directory requires write permission. # --------------------------------------------------------------------------- RMAN_LOG_FILE=/home/oracle/scripts/rman_backup.log # --------------------------------------------------------------------------- # You may want to delete the output file so that backup information does # not accumulate. If not, delete the following lines. # --------------------------------------------------------------------------- if [ -f "$RMAN_LOG_FILE" ] then rm -f "$RMAN_LOG_FILE" fi # --------------------------------------------------------------------------- # Initialize the log file. # --------------------------------------------------------------------------- echo >> $RMAN_LOG_FILE chmod 666 $RMAN_LOG_FILE # --------------------------------------------------------------------------- # Determine the user which is executing this script. # --------------------------------------------------------------------------- CUSER=`id |cut -d"(" -f2 | cut -d ")" -f1` ORACLE_USER=$CUSER # --------------------------------------------------------------------------- # Set the Oracle Recovery Manager name. # --------------------------------------------------------------------------- RMAN=$ORACLE_HOME/bin/rman # --------------------------------------------------------------------------- # Log the start of this script. # --------------------------------------------------------------------------- echo >> $RMAN_LOG_FILE echo Script $0 >> $RMAN_LOG_FILE echo >> $RMAN_LOG_FILE echo ==== started on `date` ==== >> $RMAN_LOG_FILE # --------------------------------------------------------------------------- # Print out the value of the variables set by this script. # --------------------------------------------------------------------------- echo >> $RMAN_LOG_FILE echo "RMAN: $RMAN" >> $RMAN_LOG_FILE echo "ORACLE_USER: $ORACLE_USER" >> $RMAN_LOG_FILE echo "ORACLE_SID: $ORACLE_SID" >> $RMAN_LOG_FILE echo "ORACLE_HOME: $ORACLE_HOME" >> $RMAN_LOG_FILE echo >> $RMAN_LOG_FILE # --------------------------------------------------------------------------- # Differential incremental backup Script. # --------------------------------------------------------------------------- #Weekday=`date +%u` # #if [ $Weekday = 7 ] #then # echo "Full backup requested" >> $RMAN_LOG_FILE # BACKUP_TYPE="INCREMENTAL LEVEL=0" # BACKUP_TAG="hot_db_bk_level0" # #elif [ $Weekday != 7 ] #then # echo "Differential incremental backup requested" >> $RMAN_LOG_FILE # BACKUP_TYPE="INCREMENTAL LEVEL=1" # BACKUP_TAG="hot_db_bk_level1" #fi # #echo >> $RMAN_LOG_FILE # --------------------------------------------------------------------------- # Call Recovery Manager to initiate the backup. # --------------------------------------------------------------------------- CMD_STR=" ORACLE_SID=$ORACLE_SID ORACLE_HOME=$ORACLE_HOME $RMAN nocatalog target / msglog $RMAN_LOG_FILE append << EOF RUN { allocate channel c1 device type disk; allocate channel c2 device type disk; allocate channel c3 device type disk; allocate channel c4 device type disk; BACKUP as compressed backupset INCREMENTAL LEVEL=0 TAG hot_db_bk_level0 skip inaccessible filesperset 5 FORMAT '$BACKUPDIR/bk_%d_%U_%T' database; sql 'alter system archive log current'; BACKUP skip inaccessible TAG='arch_bk' filesperset 20 FORMAT '$BACKUPDIR/arch_%d_%U_%T' ARCHIVELOG ALL NOT BACKED UP 2 TIMES; # DELETE INPUT; backup tag='controlfile_bk' format='$BACKUPDIR/controlfile_%d_%U_%T.ctl' current controlfile; backup tag='spfile_bk' format='$BACKUPDIR/spfile_%d_%U_%T.ora' spfile; release channel c1; release channel c2; release channel c3; release channel c4; } allocate channel for maintenance device type disk; crosscheck archivelog all; #delete noprompt expired archivelog all; delete noprompt archivelog all completed before 'sysdate -2'; crosscheck backup; delete noprompt expired backup; report obsolete; delete noprompt obsolete; list backup summary; release channel; EOF " # --------------------------------------------------------------------------- # Initiate the command string. # --------------------------------------------------------------------------- if [ "$CUSER" = "root" ] then echo "Root Command String: $CMD_STR" >> $RMAN_LOG_FILE su - $ORACLE_USER -c "$CMD_STR" >> $RMAN_LOG_FILE RSTAT=$? else echo "User Command String: $CMD_STR" >> $RMAN_LOG_FILE /bin/sh -c "$CMD_STR" >> $RMAN_LOG_FILE RSTAT=$? fi # --------------------------------------------------------------------------- # Log the completion of this script. # --------------------------------------------------------------------------- DBIP=`/sbin/ifconfig bond0|grep "inet addr" | awk -F[:" "]+ '{print $4}'` if [ "$RSTAT" = "0" ] then LOGMSG="ended successfully" #python /home/oracle/script/monitor/sms.py '***********' 'RMAN' "CRITICAL - $DBIP `date -d "-0 day" +%Y%m%d` RMAN ended successfully!" else LOGMSG="ended in error" python /home/oracle/script/monitor/sms.py '***********' 'RMAN' "CRITICAL - $DBIP `date -d "-0 day" +%Y%m%d` RMAN ended error!" fi echo >> $RMAN_LOG_FILE echo Script $0 >> $RMAN_LOG_FILE echo >> $RMAN_LOG_FILE echo ==== $LOGMSG on `date` ==== >> $RMAN_LOG_FILE echo >> $RMAN_LOG_FILE exit $RSTAT 删除归档脚本
vi del_backup.sh
#!/bin/ksh
PATH=/usr/bin:/usr/ucb:/etc:.:/usr/X/bin:/bin
export PATH
export BACKUPDIR=
find $BACKUPDIR -mtime +15 -name "arch_*" -exec rm {} \;
定时任务
crontab -e
0 0 * * * /bin/sh /home/oracle/scripts/rman_backup.sh
0 0 * * * /bin/sh /home/oracle/scripts/del_backup.sh
