Ü
Level 0 Full Backup: weekly (Sunday)
Ü
Level 1 Incremental Backup: daily (Mon–Sat)
Ü
Archive Log Backup: Every after 2 Hours
Ü
Controlfile + SPFILE separate backup (
Ü
TAG
Ü
3 parallel channels
Ü Validation included
1️ RMAN Supporting Configurations:
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
2️ Weekly Level 0 Full Backup (Sunday):
RUN {
ALLOCATE CHANNEL
c1 DEVICE TYPE DISK;
ALLOCATE CHANNEL
c2 DEVICE TYPE DISK;
ALLOCATE CHANNEL c3 DEVICE TYPE DISK;
-- Level 0 Full
Database Backup
BACKUP
INCREMENTAL
LEVEL 0
DATABASE
FORMAT
'/u01/backup/%d_L0_%T_%U'
TAG 'LEVEL0_FULL';
-- Archivelog
Backup + delete input
BACKUP
ARCHIVELOG ALL
FORMAT
'/u01/backup/%d_ARC_%T_%U'
DELETE INPUT;
-- Controlfile +
SPFILE Backup
BACKUP CURRENT
CONTROLFILE FORMAT '/u01/backup/%d_C_%T_%U' TAG 'CONTROLFILE';
BACKUP SPFILE FORMAT '/u01/backup/%d_S_%T_%U' TAG 'SPFILE';
-- Validate
backup immediately
RESTORE VALIDATE DATABASE;
RELEASE CHANNEL
c1;
RELEASE CHANNEL
c2;
RELEASE CHANNEL
c3;
}
3️ Daily Level 1 Incremental Backup (Mon–Sat):
RUN {
ALLOCATE CHANNEL
c1 DEVICE TYPE DISK;
ALLOCATE CHANNEL
c2 DEVICE TYPE DISK;
ALLOCATE CHANNEL c3 DEVICE TYPE DISK;
-- Level 1
Incremental Backup (Differential)
BACKUP
INCREMENTAL
LEVEL 1
DATABASE
FORMAT
'/u01/backup/%d_L1_%T_%U'
TAG 'LEVEL1_INC';
-- Optional: Controlfile/SPFILE weekly only
-- Validate
incremental backup
RESTORE VALIDATE DATABASE;
RELEASE CHANNEL
c1;
RELEASE CHANNEL
c2;
RELEASE CHANNEL
c3;
}
4️ Archive Log Backup Every 2 Hours
RUN {
ALLOCATE CHANNEL c1 DEVICE TYPE DISK;
BACKUP
ARCHIVELOG ALL
FORMAT
'/u01/backup/%d_ARC_%T_%U'
DELETE INPUT;
RELEASE CHANNEL
c1;
}
r Daily Level 1 Cumulative Backup (Mon–Sat) + Archivelog
RUN {
ALLOCATE CHANNEL
c1 DEVICE TYPE DISK;
ALLOCATE CHANNEL
c2 DEVICE TYPE DISK;
ALLOCATE CHANNEL c3 DEVICE TYPE DISK;
-- Level 1
Cumulative Backup
BACKUP
INCREMENTAL
LEVEL 1
CUMULATIVE
DATABASE
FORMAT
'/u01/backup/%d_L1C_%T_%U'
TAG 'LEVEL1_CUM';
-- Archivelog
Backup + delete input
BACKUP
ARCHIVELOG ALL
FORMAT
'/u01/backup/%d_ARC_%T_%U'
DELETE INPUT;
-- Optional: Controlfile/SPFILE weekly only
-- Validate
incremental backup
RESTORE VALIDATE DATABASE;
RELEASE CHANNEL
c1;
RELEASE CHANNEL
c2;
RELEASE CHANNEL
c3;
}
🟢 Backup Script:
🟢 Step 1: Weekly Level 0
Full Backup Script (Sunday)
📂 /u01/backup/rman_level0.sh
#!/bin/bash
export ORACLE_HOME=/u01/app/oracle/product/19.0.0/db_home
export ORACLE_SID=MAXCDB
export PATH=$ORACLE_HOME/bin:$PATH
export NLS_DATE_FORMAT="DD-MON-YYYY HH24:MI:SS"
BACKUP_DIR=/u01/backup
LOG_DIR=/u01/backup/log
rman target / log=$LOG_DIR/level0_$(date +%Y%m%d_%H%M).log <<EOF
RUN {
ALLOCATE CHANNEL
c1 DEVICE TYPE DISK;
ALLOCATE CHANNEL
c2 DEVICE TYPE DISK;
ALLOCATE CHANNEL c3 DEVICE TYPE DISK;
BACKUP
INCREMENTAL LEVEL 0 DATABASE
FORMAT
'$BACKUP_DIR/%d_L0_%T_%U'
TAG 'LEVEL0_FULL';
BACKUP ARCHIVELOG
ALL
FORMAT
'$BACKUP_DIR/%d_ARC_%T_%U'
DELETE INPUT;
BACKUP CURRENT
CONTROLFILE FORMAT '$BACKUP_DIR/%d_C_%T_%U' TAG 'CONTROLFILE';
BACKUP SPFILE FORMAT '$BACKUP_DIR/%d_S_%T_%U' TAG 'SPFILE';
RESTORE VALIDATE DATABASE;
RELEASE CHANNEL
c1;
RELEASE CHANNEL
c2;
RELEASE CHANNEL
c3;
}
EOF
🟢 Step 2: Daily Level 1
Incremental Backup Script (Mon–Sat)
📂 /u01/app/backup/rman_level1.sh
#!/bin/bash
export ORACLE_HOME=/u01/app/oracle/product/19.0.0/db_home
export ORACLE_SID=MAXCDB
export PATH=$ORACLE_HOME/bin:$PATH
export NLS_DATE_FORMAT="DD-MON-YYYY HH24:MI:SS"
BACKUP_DIR=/u01/backup
LOG_DIR=/u01/backup/log
rman target / log=$LOG_DIR/rman_$(date +%Y%m%d_%H%M).log <<EOF
RUN {
ALLOCATE CHANNEL
c1 DEVICE TYPE DISK;
ALLOCATE CHANNEL
c2 DEVICE TYPE DISK;
ALLOCATE CHANNEL c3 DEVICE TYPE DISK;
BACKUP
INCREMENTAL LEVEL 1 DATABASE
FORMAT
'$BACKUP_DIR/%d_L1_%T_%U'
TAG 'LEVEL1_INC';
RESTORE VALIDATE DATABASE;
RELEASE CHANNEL
c1;
RELEASE CHANNEL
c2;
RELEASE CHANNEL
c3;
}
EOF
🟢 Step 3: Archive Log
Backup Script (Every 2 Hours)
📂 /u01/backup/rman_arch.sh
#!/bin/bash
export ORACLE_HOME=/u01/app/oracle/product/19.0.0/db_home
export ORACLE_SID=MAXCDB
export PATH=$ORACLE_HOME/bin:$PATH
export NLS_DATE_FORMAT="DD-MON-YYYY HH24:MI:SS"
BACKUP_DIR=/u01/backup
LOG_DIR=/u01/backup/log
rman target / log=$LOG_DIR/rman_$(date +%Y%m%d_%H%M).log <<EOF
RUN {
ALLOCATE CHANNEL c1 DEVICE TYPE DISK;
BACKUP ARCHIVELOG
ALL
FORMAT
'$BACKUP_DIR/%d_ARC_%T_%U'
DELETE INPUT;
RELEASE CHANNEL
c1;
}
EOF
🟢 Step 4: Script executable
chmod +x /u01/app/backup/rman_level0.sh
chmod +x /u01/app/backup/rman_level1.sh
chmod +x /u01/app/backup/rman_arch.sh
🟢 Step 5: Add to Crontab
# Weekly Level 0 Full Backup – Every Sunday at 02:00 AM
0 2 * * 0 /u01/app/backup/rman_level0.sh > /dev/null 2>&1
# Daily Level 1 Incremental Backup – Monday to Saturday
at 02:00 AM
0 2 * * 1-6 /u01/app/backup/rman_level1.sh > /dev/null 2>&1
# Archive Log Backup – Every 2 hours
0 */2 * * * /u01/app/backup/rman_arch.sh > /dev/null
2>&1