首页 > 代码库 > linux 下RMAN备份shell脚本

linux 下RMAN备份shell脚本

   RMAN备份对于Oracle数据库的备份与恢复简单易用,成本低廉。对于使用非catalog方式而言,将RMAN脚本嵌入到shell脚本,然后再通过crontab来实现中小型数据库数据库备份无疑是首选。本文提供了一个简单易用的基于linux shell下的RMAN备份脚本供参考。大家可根据自己的需要进行适当调整。

 

RMAN备份相关方面的知识较多,可以参考:
    RMAN 概述及其体系结构
    RMAN 配置、监控与管理
    RMAN 备份详解
    RMAN 还原与恢复
    RMAN catalog 的创建和使用
    基于catalog 创建RMAN存储脚本
    基于catalog 的RMAN 备份与恢复
    RMAN 备份路径困惑
    
其次是对于shell脚本中调用sql,rman语句可以参考
  Linux/Unix shell 脚本中调用SQL,RMAN脚本 
  Linux/Unix shell sql 之间传递变量 
    
下面是脚本的具体内容

[python] view plain copy
 
 print?
    1. ##===========================================================  
    2. ##   db_bak_rman.sh                
    3. ##   created by Robinson           
    4. ##   2011/11/07    
    5. ##   usage: db_bak_rman.sh <$ORACLE_SID> <$BACKUP_LEVEL>  
    6. ##          BACKUP_LEVEL:   
    7. ##             F: full backup  
    8. ##             0: level 0  
    9. ##             1: level 1                             
    10. ##============================================================  
    11. #!/bin/bash  
    12. # User specific environment and startup programs  
    13.   
    14. if [ -f ~/.bash_profile ];   
    15. then  
    16. . ~/.bash_profile  
    17. fi  
    18.   
    19. ORACLE_SID=${1};                              export ORACLE_SID      
    20. RMAN_LEVEL=${2};                              export RMAN_LEVEL  
    21. TIMESTAMP=`date +%Y%m%d%H%M`;                 export TIMESTAMP       
    22. DATE=`date +%Y%m%d`;                          export DATE            
    23. RMAN_DIR=/u02/database/${ORACLE_SID}/backup/rman;   export RMAN_DIR        
    24. RMAN_DATA=http://www.mamicode.com/${RMAN_DIR}/${DATE}; export RMAN_DATA
    25. #RMAN_LOG=$RMAN_DATA/log;                     export RMAN_LOG       
    26. RMAN_LOG=/u02/database/${ORACLE_SID}/backup/rman/log  export RMAN_LOG   
    27.   
    28. # Check rman level   
    29. #======================================================================  
    30. if [ "$RMAN_LEVEL" == "F" ];  
    31. then  unset INCR_LVL  
    32.       BACKUP_TYPE=full  
    33. else  
    34.       INCR_LVL="INCREMENTAL LEVEL ${RMAN_LEVEL}"  
    35.       BACKUP_TYPE=lev${RMAN_LEVEL}   
    36. fi  
    37.   
    38. RMAN_FILE=${RMAN_DATA}/${ORACLE_SID}_${BACKUP_TYPE}_${TIMESTAMP};       export RMAN_FILE  
    39. SSH_LOG=${RMAN_LOG}/${ORACLE_SID}_${BACKUP_TYPE}_${TIMESTAMP}.log;      export SSH_LOG  
    40. MAXPIECESIZE=4G;                                                export MAXPIECESIZE  
    41.   
    42. #Check RMAN Backup Path  
    43. #=========================================================================  
    44.   
    45. if ! test -d ${RMAN_DATA}  
    46. then  
    47. mkdir -p ${RMAN_DATA}  
    48. fi  
    49.   
    50. echo "---------------------------------" >>${SSH_LOG}  
    51. echo "   " >>${SSH_LOG}  
    52. echo "Rman Begin  to Working ........." >>${SSH_LOG}  
    53. echo "Begin time at:" `date` --`date +%Y%m%d%H%M` >>${SSH_LOG}  
    54.   
    55. #Startup rman to backup   
    56. #=============================================================================  
    57. $ORACLE_HOME/bin/rman log=${RMAN_FILE}.log <<EOF  
    58. connect target /  
    59. run {  
    60. CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 3 DAYS;  
    61. CONFIGURE BACKUP OPTIMIZATION ON;  
    62. CONFIGURE CONTROLFILE AUTOBACKUP ON;  
    63. CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO ‘${RMAN_FILE}_%F‘;  
    64. ALLOCATE CHANNEL ‘ch1‘ TYPE DISK maxpiecesize=${MAXPIECESIZE};  
    65. ALLOCATE CHANNEL ‘ch2‘ TYPE DISK maxpiecesize=${MAXPIECESIZE};  
    66. set limit channel ch1 readrate=10240;  
    67. set limit channel ch1 kbytes=4096000;  
    68. set limit channel ch2 readrate=10240;  
    69. set limit channel ch2 kbytes=4096000;  
    70. CROSSCHECK ARCHIVELOG ALL;  
    71. DELETE NOPROMPT EXPIRED ARCHIVELOG ALL;  
    72. BACKUP   
    73. #AS COMPRESSED BACKUPSET   
    74. ${INCR_LVL}  
    75. DATABASE FORMAT ‘${RMAN_FILE}_%U‘ TAG ‘${ORACLE_SID}_${BACKUP_TYPE}_${TIMESTAMP}‘;  
    76. SQL ‘ALTER SYSTEM ARCHIVE LOG CURRENT‘;  
    77. BACKUP ARCHIVELOG ALL FORMAT ‘${RMAN_FILE}_arc_%U‘ TAG ‘${ORACLE_SID}_arc_${TIMESTAMP}‘  
    78. DELETE  INPUT;  
    79. DELETE NOPROMPT OBSOLETE;  
    80. RELEASE CHANNEL ch1;  
    81. RELEASE CHANNEL ch2;  
    82. }  
    83. sql "alter database backup controlfile to ‘‘${RMAN_DATA}/cntl_${BACKUP_TYPE}.bak‘‘";  
    84. exit;  
    85. EOF  
    86. RC=$?  
    87.   
    88. cat ${RMAN_FILE}.log >>${SSH_LOG}  
    89. echo "Rman Stop working @ time:"`date` `date +%Y%m%d%H%M` >>${SSH_LOG}  
    90.   
    91. echo >>${SSH_LOG}  
    92. echo "------------------------" >>${SSH_LOG}  
    93. echo "------ Disk Space ------" >>${SSH_LOG}  
    94. df -h >>${SSH_LOG}  
    95.   
    96. echo >>${SSH_LOG}  
    97.   
    98. if [ $RC -ne "0" ]; then  
    99.     echo "------ error ------" >>${SSH_LOG}  
    100. else  
    101.     echo "------ no error found during RMAN backup peroid------" >>${SSH_LOG}  
    102.     rm -rf ${RMAN_FILE}.log  
    103. fi  
    104.   
    105. #Remove old backup than 3 days  
    106. #============================================================================  
    107. RMDIR=${RMAN_DIR}/`/bin/date +%Y%m%d -d "3 days ago"`;   export RMDIR  
    108. echo >>${SSH_LOG}  
    109. echo -e "------Remove old backup than 3 days ------\n" >>${SSH_LOG}  
    110.   
    111. if test -d ${RMDIR}  
    112.     then  
    113.     rm -rf ${RMDIR}  
    114.     RC=$?  
    115. fi  
    116.   
    117. echo >>${SSH_LOG}  
    118.   
    119. if [ $RC -ne "0" ]; then  
    120.     echo -e "------ Remove old backup exception------ \n" >>${SSH_LOG}  
    121. else  
    122.     echo -e "------ no error found during remove old backup set peroid------ \n" >>${SSH_LOG}  
    123. fi  
    124.   
    125. exit  
    126.   
    127. oracle@SZDB:~/robinson/scripts/dba_scripts/custom/sql> ./db_bak_rman.sh GOBO1 0  
    128. RMAN> RMAN> 2> 3> 4> 5> 6> 7> 8> 9> 10> 11> 12> 13> 14> 15>   
    129. 16> 17> 18> 19> 20> 21> 22> 23> 24> RMAN> RMAN>   
    130. oracle@SZDB:~/robinson/scripts/dba_scripts/custom/sql>  
    131.   
    132. oracle@SZDB:/u02/database/GOBO1/backup/rman> ls  
    133. 20120928  log  
    134. oracle@SZDB:/u02/database/GOBO1/backup/rman/20120928> ls  
    135. cntl_lev0.bak                             GOBO1_lev0_201209281421_arc_4onmb9ro_1_1  
    136. GOBO1_lev0_201209281421_4knmb9jn_1_1      GOBO1_lev0_201209281421_c-733951103-20120928-00  
    137. GOBO1_lev0_201209281421_4lnmb9jn_1_1      GOBO1_lev0_201209281421_c-733951103-20120928-01  
    138. GOBO1_lev0_201209281421_arc_4nnmb9rn_1_1  
    139. 转:http://blog.csdn.net/leshami/article/details/8029245

linux 下RMAN备份shell脚本