Loading

RMAN的实战篇--备份脚本

案列一、

目标:

1、每天夜间1 点执行;
2、数据库全备,同时备份控制文件及归档日志文件,备份文件保存至: /backup\目录下,并在完成归档日志文件备份后,自动删除已备份的归档日志;
3、备份保留7 天,过期则自动删除;
4、保留操作日志备查;

 

1. 编写RMAN脚本:

RUN{
        CONFIGURE RETENTION POLICY TO  RECOVERY WINDOW OF 7 DAYS;
        CONFIGURE CONTROLFILE AUTOBACKUP ON;
        CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/backup/%F';
        ALLOCATE CHANNEL CH1 DEVICE TYPE DISK FORMAT '/backup/%U';
        BACKUP DATABASE SKIP INACCESSIBLE FILESPERSET 10
                PLUS ARCHIVELOG FILESPERSET 20
                DELETE ALL INPUT;
                RELEASE CHANNEL CH1;
}
ALLOCATE CHANNEL FOR MAINTENANCE DEVICE TYPE DISK;
CROSSCHECK BACKUPSET;
DELETE NOPROMPT OBSOLETE;

  SKIP INACCESSIBLE:表示跳过不可读的文件。

  SKIP OFFLINE:跳过offline 的数据文件;

  SKIP READONLY:跳过那些所在表空间为read-only 的数据文件;

 

2. 执行,并将输出日志重定向到指定文件

rman target/ msglog /home/oracle/Script/logs/`date +%F`.log cmdfile=/home/oracle/Script/orclDB_backup.rman 

 

3.检测结果

[oracle@oracle Script]$ ls /backup/
0mro5acq_1_1              0oro5afm_1_1              
0nro5ada_1_1              c-1458478724-20161223-00  
[oracle@oracle Script]$ ls logs/
2016-12-23.log

 

案列二、增量备份

##===========================================================  
##   db_bak_rman.sh                
##   created by Robinson           
##   2011/11/07    
##   usage: db_bak_rman.sh <$ORACLE_SID> <$BACKUP_LEVEL>  
##          BACKUP_LEVEL:   
##             F: full backup  
##             0: level 0  
##             1: level 1                             
##============================================================  
#!/bin/bash  
# User specific environment and startup programs  
  
if [ -f ~/.bash_profile ];   
then  
. ~/.bash_profile  
fi  
  
ORACLE_SID=${1};                                      export ORACLE_SID      
RMAN_LEVEL=${2};                                      export RMAN_LEVEL  
TIMESTAMP=`date +%Y%m%d%H%M`;                         export TIMESTAMP       
DATE=`date +%Y%m%d`;                                  export DATE            
RMAN_DIR=/u02/database/${ORACLE_SID}/backup/rman;       export RMAN_DIR        
RMAN_DATA=${RMAN_DIR}/${DATE};                        export RMAN_DATA       
RMAN_LOG=/u02/database/${ORACLE_SID}/backup/rman/log      export RMAN_LOG   
  
# Check rman level   
#======================================================================  
if [ "$RMAN_LEVEL" == "F" ];  
then  unset INCR_LVL  
      BACKUP_TYPE=full  
else  
      INCR_LVL="INCREMENTAL LEVEL ${RMAN_LEVEL}"  
      BACKUP_TYPE=lev${RMAN_LEVEL}   
fi  
  
RMAN_FILE=${RMAN_DATA}/${ORACLE_SID}_${BACKUP_TYPE}_${TIMESTAMP};       export RMAN_FILE  
SSH_LOG=${RMAN_LOG}/${ORACLE_SID}_${BACKUP_TYPE}_${TIMESTAMP}.log;      export SSH_LOG  
MAXPIECESIZE=4G;                                                    export MAXPIECESIZE  
  
#Check RMAN Backup Path  
#=========================================================================  
  
if ! test -d ${RMAN_DATA}  
then  
mkdir -p ${RMAN_DATA}  
fi  

if [ ! -d  ${RMAN_LOG} ];
then
mkdir -p ${RMAN_LOG}
fi

echo "---------------------------------" >>${SSH_LOG}  
echo "   " >>${SSH_LOG}  
echo "Rman Begin  to Working ........." >>${SSH_LOG}  
echo "Begin time at:" `date` --`date +%Y%m%d%H%M` >>${SSH_LOG}  
  
#Startup rman to backup   
#=============================================================================  
$ORACLE_HOME/bin/rman log=${RMAN_FILE}.log <<EOF  
connect target /  
run {  
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 3 DAYS;  
CONFIGURE BACKUP OPTIMIZATION ON;  
CONFIGURE CONTROLFILE AUTOBACKUP ON;  
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '${RMAN_FILE}_%F';  
ALLOCATE CHANNEL 'ch1' TYPE DISK maxpiecesize=${MAXPIECESIZE};  
ALLOCATE CHANNEL 'ch2' TYPE DISK maxpiecesize=${MAXPIECESIZE};  
set limit channel ch1 readrate=10240;  
set limit channel ch1 kbytes=4096000;  
set limit channel ch2 readrate=10240;  
set limit channel ch2 kbytes=4096000;  
CROSSCHECK ARCHIVELOG ALL;  
DELETE NOPROMPT EXPIRED ARCHIVELOG ALL;  
BACKUP   
#AS COMPRESSED BACKUPSET   
${INCR_LVL}  
DATABASE FORMAT '${RMAN_FILE}_%U' TAG '${ORACLE_SID}_${BACKUP_TYPE}_${TIMESTAMP}';  
SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT';  
BACKUP ARCHIVELOG ALL FORMAT '${RMAN_FILE}_arc_%U' TAG '${ORACLE_SID}_arc_${TIMESTAMP}'  
DELETE  INPUT;  
DELETE NOPROMPT OBSOLETE;  
RELEASE CHANNEL ch1;  
RELEASE CHANNEL ch2;  
}  
sql "alter database backup controlfile to ''${RMAN_DATA}/cntl_${BACKUP_TYPE}.bak''";  
exit;
  
EOF
 
RC=$?  
  
cat ${RMAN_FILE}.log >>${SSH_LOG}  
echo "Rman Stop working @ time:"`date` `date +%Y%m%d%H%M` >>${SSH_LOG}  
  
echo >>${SSH_LOG}  
echo "------------------------" >>${SSH_LOG}  
echo "------ Disk Space ------" >>${SSH_LOG}  
df -h >>${SSH_LOG}  
  
echo >>${SSH_LOG}  
  
if [ $RC -ne "0" ]; then  
    echo "------ error ------" >>${SSH_LOG}  
else  
    echo "------ no error found during RMAN backup peroid------" >>${SSH_LOG}  
    rm -rf ${RMAN_FILE}.log  
fi  
  
#Remove old backup than 3 days  
#============================================================================  
RMDIR=${RMAN_DIR}/`/bin/date +%Y%m%d -d "3 days ago"`;   export RMDIR  
echo >>${SSH_LOG}  
echo -e "------Remove old backup than 3 days ------\n" >>${SSH_LOG}  
  
if test -d ${RMDIR}  
    then  
    rm -rf ${RMDIR}  
    RC=$?  
fi  
  
echo >>${SSH_LOG}  
  
if [ $RC -ne "0" ]; then  
    echo -e "------ Remove old backup exception------ \n" >>${SSH_LOG}  
else  
    echo -e "------ no error found during remove old backup set peroid------ \n" >>${SSH_LOG}  
fi  

exit 

运行:

[oracle@oracle Script]$ sh  db_rman.sh orcl 0
RMAN> RMAN> 2> 3> 4> 5> 6> 7> 8> 9> 10> 11> 12> 13> 14> 15> 16> 17> 18> 19> 20> 21> 22> 23> 24> RMAN> RMAN> [oracle@oracle Script]$

结果:

[oracle@oracle rman]$ ls
20161228  log
[oracle@oracle rman]$ ls 20161228/
cntl_lev0.bak                            orcl_lev0_201612280027_arc_2qroidlp_1_1
orcl_lev0_201612280027_2mroidj8_1_1      orcl_lev0_201612280027_c-1458478724-20161228-02
orcl_lev0_201612280027_2nroidj9_1_1      orcl_lev0_201612280027_c-1458478724-20161228-03
orcl_lev0_201612280027_arc_2proidlp_1_1  

 

posted @ 2016-12-23 13:39  头痛不头痛  阅读(1329)  评论(0编辑  收藏  举报