RMAN Backup Setup
- Backup Type: Archive Log
- Interval: Every 2 Hours
- Schedule Time: 2, 4, 8, 10, 14, 16, 22
- Retention: 1 Day
- Compression: Yes
- Backup Type: Incremental (Level 1)
- Interval: Every 6 Hours
- Schedule Time: 6, 12, 18
- Retention: 1 Day
- Compression: Yes
- Backup Type: Cumulative (Level 1)
- Interval: Daily
- Schedule Time: 0 (Midnight)
- Retention: 1 Week
- Compression: Yes
- 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"
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
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
Post a Comment