linux 下RMAN備份shell指令碼

us_yunleiwang發表於2013-12-05
   RMAN備份對於Oracle資料庫的備份與恢復簡單易用,成本低廉。對於使用非catalog方式而言,將RMAN指令碼嵌入到shell指令碼,然後再透過crontab來實現中小型資料庫資料庫備份無疑是首選。本文提供了一個簡單易用的基於linux shell下的RMAN備份指令碼供參考。大家可根據自己的需要進行適當調整。

其次是對於shell指令碼中呼叫sql,rman語句可以參考
  Linux/Unix shell 指令碼中呼叫SQL,RMAN指令碼 
  Linux/Unix shell sql 之間傳遞變數 
    
下面是指令碼的具體內容

  1. ##===========================================================  
  2. ##   db_bak_rman.sh                
  3. ##   created by Robinson           
  4. ##   2011/11/07    
  5. ##   usage: db_bak_rman.sh    
  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=${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 <
  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> 23456789101112131415>   
  129. 161718192021222324> 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  

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23490154/viewspace-1062407/,如需轉載,請註明出處,否則將追究法律責任。

相關文章