Oracle RMAN production script
From MyWiki
#!/bin/bash # # First attempt at ONLINE RMAN backup scripts - by xxxxxxxxx modified by xxxxxxxxx July 2010 # # remark xxxxxxxxx, restore without catalog must use DBID, here is the current <db_name> DBID=xxxxxxxxxxx # # Make sure only oracle can run our script if [ "$(id -u)" != "101" ]; then echo "This script must be run as user Oracle \n" 1>&2 exit 1 fi # # #set ORACLE_HOME ORACLE_HOME=/xxxxxx/app/oracle/product/11 ORACLE_SID=xxxxxxxx export ORACLE_HOME ORACLE_SID dayofweek=`date +%a` # BACKUP_LOCATION=/rman_nfs BACKUP_LOGS=/rman_nfs/logs/rman_backup`date +%Y%m%d`.log if [ "$dayofweek" = "Thu" ]; then backuptype="BACKUP INCREMENTAL LEVEL 0 DATABASE PLUS ARCHIVELOG delete all input" else backuptype="RECOVER copy of database with tag 'incremental_backup' until time 'sysdate-7'; BACKUP INCREMENTAL LEVEL 1 FOR RECOV ER OF COPY WITH TAG 'incremental_backup' DATABASE PLUS ARCHIVELOG delete all input" fi echo ========================= echo Backup Started : $(date) echo ========================= before="$(date +%s)" ### Dont' shutdown oracle as we are doing ONLINE BACKUP #$ORACLE_HOME/bin/dbshut $ORACLE_HOME >& $ORACLE_HOME/dbshut.log $ORACLE_HOME/bin/rman target / log=${BACKUP_LOGS} <<EOF RUN { CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 14 DAYS; CONFIGURE COMPRESSION ALGORITHM 'ZLIB'; CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO COMPRESSED BACKUPSET; CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '${BACKUP_LOCATION}/database_f%t_s%s_s%p'; CONFIGURE BACKUP OPTIMIZATION ON; CONFIGURE CONTROLFILE AUTOBACKUP ON; CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '${BACKUP_LOCATION}/controlfile_%F'; allocate CHANNEL m1 TYPE DISK FORMAT '${BACKUP_LOCATION}/database_f%t_s%s_s%p'; CROSSCHECK BACKUP; CROSSCHECK ARCHIVELOG ALL; # backup recovery area; only backup recovery area to local tape drive DELETE NOPROMPT FORCE EXPIRED BACKUP; DELETE NOPROMPT FORCE EXPIRED ARCHIVELOG ALL; DELETE NOPROMPT FORCE OBSOLETE; ${backuptype}; BACKUP CURRENT CONTROLFILE; release CHANNEL m1; } EXIT EOF after="$(date +%s)" elapsed_seconds="$(expr $after - $before)" echo "" echo ========================= echo Backup Ended : $(date) echo ========================= echo Elapsed time: $(date -d "1970-01-01 $elapsed_seconds sec" +%H:%M:%S) if grep -q "error" $BACKUP_LOGS 1> /dev/null then echo "" echo "Error! RMAN backup error" echo "=====" cat $BACKUP_LOGS echo "=====" ### email us for failure backup with the attachment of the $BACKUP_LOGS else echo "" echo "Success RMAN Backup -" .$BACKUP_LOGS echo "=====" cat $BACKUP_LOGS echo "=====" ### email us for successful backup with the attachment of the $BACKUP_LOGS fi exit