RMAN Backup Setup

  1. Backup Type: Archive Log

    • Interval: Every 2 Hours
    • Schedule Time: 2, 4, 8, 10, 14, 16, 22
    • Retention: 1 Day
    • Compression: Yes

  1. Backup Type: Incremental (Level 1)
    • Interval: Every 6 Hours
    • Schedule Time: 6, 12, 18
    • Retention: 1 Day
    • Compression: Yes
  1. Backup Type: Cumulative (Level 1)
    • Interval: Daily
    • Schedule Time: 0 (Midnight)
    • Retention: 1 Week
    • Compression: Yes
  1. Backup Type: Full (Level 0 Baseline)
    • Interval: Weekly
    • Schedule Time: Sundays at 20 (8 PM)
    • Retention: 1 Month
    • Compression: Yes
  • Backup Directory: /backup/rman_backup 
  • Script Directory: /home/oracle/scripts/rman_scripts
  • Log Directory: /home/oracle/scripts/logfile 

Step#1: Create a backup script file 
# vi /home/oracle/scripts/rman_scripts/rman_backup.sh 

#!/bin/bash
# Set up Oracle environment variables (Verify these match your env)
export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
export ORACLE_SID=orcl
export PATH=$ORACLE_HOME/bin:$PATH
BACKUP_TYPE=$1

LOG_FILE="/home/oracle/scripts/logfile/rman_${BACKUP_TYPE}_$(date +%Y%m%d_%H%M).log"
echo "=== RMAN Compressed Backup Started: $(date) ===" > "$LOG_FILE"
# Execute standard Bash conditional checks outside the RMAN block
if [ "$BACKUP_TYPE" = "ARCHIVE" ]; then
$ORACLE_HOME/bin/rman target / << EOF >> "$LOG_FILE" 2>&1
RUN {
  ALLOCATE CHANNEL ch1 DEVICE TYPE DISK FORMAT '/backup/mybackup/db_rman_backup/%U';
  BACKUP AS COMPRESSED BACKUPSET ARCHIVELOG ALL DELETE INPUT;
  CROSSCHECK BACKUP OF ARCHIVELOG ALL;
  DELETE NOPROMPT EXPIRED BACKUP;
  DELETE NOPROMPT OBSOLETE RECOVERY WINDOW OF 1 DAYS;
  RELEASE CHANNEL ch1;
}
EXIT;
EOF
elif [ "$BACKUP_TYPE" = "INCREMENTAL" ]; then
$ORACLE_HOME/bin/rman target / << EOF >> "$LOG_FILE" 2>&1
RUN {
  ALLOCATE CHANNEL ch1 DEVICE TYPE DISK FORMAT '/backup/mybackup/db_rman_backup/%U';
  BACKUP AS COMPRESSED BACKUPSET INCREMENTAL LEVEL 1 DATABASE PLUS ARCHIVELOG DELETE INPUT;
  CROSSCHECK BACKUP;
  DELETE NOPROMPT EXPIRED BACKUP;
  DELETE NOPROMPT OBSOLETE RECOVERY WINDOW OF 1 DAYS;
  RELEASE CHANNEL ch1;
}
EXIT;
EOF
elif [ "$BACKUP_TYPE" = "CUMULATIVE" ]; then
$ORACLE_HOME/bin/rman target / << EOF >> "$LOG_FILE" 2>&1
RUN {
  ALLOCATE CHANNEL ch1 DEVICE TYPE DISK FORMAT '/backup/mybackup/db_rman_backup/%U';
  BACKUP AS COMPRESSED BACKUPSET INCREMENTAL LEVEL 1 CUMULATIVE DATABASE PLUS ARCHIVELOG DELETE INPUT;
  CROSSCHECK BACKUP;
  DELETE NOPROMPT EXPIRED BACKUP;
  DELETE NOPROMPT OBSOLETE RECOVERY WINDOW OF 7 DAYS;
  RELEASE CHANNEL ch1;
}
EXIT;
EOF
elif [ "$BACKUP_TYPE" = "FULL" ]; then
$ORACLE_HOME/bin/rman target / << EOF >> "$LOG_FILE" 2>&1
RUN {
  ALLOCATE CHANNEL ch1 DEVICE TYPE DISK FORMAT '/backup/mybackup/db_rman_backup/%U';
  BACKUP AS COMPRESSED BACKUPSET INCREMENTAL LEVEL 0 DATABASE PLUS ARCHIVELOG DELETE INPUT;
  CROSSCHECK BACKUP;
  DELETE NOPROMPT EXPIRED BACKUP;
  DELETE NOPROMPT OBSOLETE RECOVERY WINDOW OF 31 DAYS;
  RELEASE CHANNEL ch1;
}
EXIT;
EOF
else
  echo "ERROR: Invalid BACKUP_TYPE '$BACKUP_TYPE' specified." >> "$LOG_FILE"
fi
echo "=== RMAN Compressed Backup Finished: $(date) ===" >> "$LOG_FILE"



Step#2: Give execute permission to rman backup script file 
chmod +x /home/oracle/scripts/rman_scripts/rman_backup.sh 

Step#3: Schedule the script in crontab 

### Archive Backup every 2 hours ###
0 2,4,8,10,14,16,22 * * * /home/oracle/scripts/rman_scripts/rman_backup.sh  ARCHIVE > /home/oracle/scripts/rman/logs/cron_archive.log 2>&1

### Incremental Backup every 6 hours ###
0 6,12,18 * * * /home/oracle/scripts/rman_scripts/rman_backup.sh  INCREMENTAL > /home/oracle/scripts/rman/logs/cron_inc.log 2>&1

### Cumulative Backup every day at 12 AM ###
0 0 * * * /home/oracle/scripts/rman_scripts/rman_backup.sh  CUMULATIVE > /home/oracle/scripts/rman/logs/cron_cumulative.log 2>&1

### Full Level 0 Backup every Sunday at 8 PM ###
0 20 * * 0 /home/oracle/scripts/rman_scripts/rman_backup.sh  FULL > /home/oracle/scripts/rman/logs/cron_full.log 2>&1

===================================================


Comments

Popular posts from this blog

Database Network : Configuration Parameters

Undo Segments : Drop Problematic Undo Segments