RMAN_ARCH_Backup_v2.ksh 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. #!/bin/ksh
  2. # ====================================================================================================
  3. # Title: RMAN_ARCH_Backup.ksh
  4. # Author: Richard Wilson
  5. # Date: 09.02.2015
  6. # Description: Backup Archivelogs.
  7. # Usage: RMAN_ARCH_Backup.ksh <$ORACLE_SID> <Retention_Period>
  8. #
  9. # History:
  10. # 09.02.2015 RW First version.
  11. #
  12. # ----------------------------------------------------------------------------------------------------
  13. function is_sid_valid
  14. {
  15. if [ `ps -ef | grep -v grep | grep "ora_pmon_${ORACLE_SID}$" | wc -l 2> /dev/null` -eq 0 ]
  16. then
  17. return 1
  18. else
  19. return 0
  20. fi
  21. }
  22. function is_fs_mounted
  23. {
  24. mount | grep "${BACKUP_FS}" > /dev/null && return 0 || return 1
  25. }
  26. build_cmdfile()
  27. {
  28. # Build RMAN command file.
  29. echo "connect target / " > ${RMAN_CMD_FILE}
  30. echo "" >> ${RMAN_CMD_FILE}
  31. echo "run {" >> ${RMAN_CMD_FILE}
  32. echo "sql 'ALTER SYSTEM SET CONTROL_FILE_RECORD_KEEP_TIME=60 SCOPE=BOTH';" >> ${RMAN_CMD_FILE}
  33. echo "CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF ${SAVE_DAYS} DAYS;" >> ${RMAN_CMD_FILE}
  34. # echo "CONFIGURE ARCHIVELOG DELETION POLICY TO BACKED UP 1 TIMES TO disk APPLIED ON ALL STANDBY;" >> ${RMAN_CMD_FILE}
  35. echo "CONFIGURE ARCHIVELOG DELETION POLICY TO BACKED UP 1 TIMES TO disk;" >> ${RMAN_CMD_FILE}
  36. echo "CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u01/app/oracle/product/11.2.0/dbhome_1/dbs/snapcf_${ORACLE_SID}.f';" >> ${RMAN_CMD_FILE}
  37. echo "CONFIGURE CONTROLFILE AUTOBACKUP ON;" >> ${RMAN_CMD_FILE}
  38. echo "CONFIGURE DEVICE TYPE DISK BACKUP TYPE TO COMPRESSED BACKUPSET PARALLELISM 4;" >> ${RMAN_CMD_FILE}
  39. echo "CROSSCHECK backup of database;" >> ${RMAN_CMD_FILE}
  40. echo "CROSSCHECK backup of controlfile;" >> ${RMAN_CMD_FILE}
  41. echo "CROSSCHECK archivelog all;" >> ${RMAN_CMD_FILE}
  42. echo "sql 'ALTER SYSTEM ARCHIVE LOG CURRENT';" >> ${RMAN_CMD_FILE}
  43. echo "backup as compressed backupset TAG='Arch_${ORACLE_SID}_`date +%d%m%YT%H%M%S`' archivelog all delete input;" >> ${RMAN_CMD_FILE}
  44. # echo "backup as compressed backupset TAG='Arch_${ORACLE_SID}_`date +%d%m%YT%H%M%S`' archivelog UNTIL TIME 'sysdate-1/24' delete all input;" >> ${RMAN_CMD_FILE}
  45. # echo "backup as compressed backupset archivelog all delete input;" >> ${RMAN_CMD_FILE}
  46. echo "DELETE FORCE NOPROMPT OBSOLETE;" >> ${RMAN_CMD_FILE}
  47. echo "}" >> ${RMAN_CMD_FILE}
  48. echo "exit" >> ${RMAN_CMD_FILE}
  49. }
  50. build_backup_cmdfile()
  51. {
  52. # Build RMAN command file.
  53. echo "connect target / " > ${RMAN_BACKUPSET_SCRIPT}
  54. echo "run {" >> ${RMAN_BACKUPSET_SCRIPT}
  55. echo "backup backupset completed after \"TO_DATE('${BACKUP_DATE}','DD-MM-YYYY HH24:MI')\" format '${BACKUP_FS}/${ORACLE_SID}/%U';" >> ${RMAN_BACKUPSET_SCRIPT}
  56. echo "}" >> ${RMAN_BACKUPSET_SCRIPT}
  57. echo "exit" >> ${RMAN_BACKUPSET_SCRIPT}
  58. }
  59. export ORACLE_SID=${1}
  60. export SAVE_DAYS=${2}
  61. export ORACLE_HOME="/u01/app/oracle/product/11.2.0/dbhome_1"
  62. export SCRIPT_DIR="/home/oracle/Scripts/RMAN"
  63. export RMAN_CMD_FILE=${SCRIPT_DIR}/${ORACLE_SID}_rman_ARCH_cmds.rman
  64. export RMAN_BACKUPSET_SCRIPT=${SCRIPT_DIR}/${ORACLE_SID}_rman_arch_backup_cmds.rman
  65. export BACKUP_DATE=`date "+%d-%m-%Y %R"`
  66. export BACKUP_FS="/backups"
  67. export BACKUP_LOG=${SCRIPT_DIR}/logs/${ORACLE_SID}_backup_ARCH.log
  68. if [ ${#} -eq 2 ]
  69. then
  70. ORACLE_SID=`echo ${ORACLE_SID} | tr "[a-z]" "[A-Z]"`
  71. if is_sid_valid
  72. then
  73. if [[ "$2" = +([0-9]) ]]
  74. then
  75. build_cmdfile
  76. build_backup_cmdfile
  77. ${ORACLE_HOME}/bin/rman cmdfile=${RMAN_CMD_FILE} log=${BACKUP_LOG}
  78. if [ $? = 0 ]
  79. then
  80. if is_fs_mounted
  81. then
  82. # build_backup_cmdfile
  83. ${ORACLE_HOME}/bin/rman cmdfile=${RMAN_BACKUPSET_SCRIPT}
  84. else
  85. BACKUP_OUTCOME="WARNING"
  86. echo -e "${BACKUP_OUTCOME}: Backup filesystem not mounted....." > ${BACKUP_LOG}
  87. fi
  88. else
  89. BACKUP_OUTCOME="ERROR"
  90. echo -e "${BACKUP_OUTCOME}: ${ORACLE_SID} Database Archivelog Backup Failed." > ${BACKUP_LOG}
  91. fi
  92. else
  93. echo "ERROR: The Retention Period must be numeric, in days!"
  94. fi
  95. else
  96. echo "ERROR: The '${ORACLE_SID}' database does not exist."
  97. fi
  98. else
  99. echo -e "\nUsage: RMAN_DB_arch_backup.ksh <ORACLE_SID> <RETENTION_PERIOD>\n"
  100. fi
  101. # End of File