Skip to content

RMAN Overview & Setup

Oracle Recovery Manager (RMAN) is Oracle’s primary backup and recovery tool, providing enterprise-grade capabilities for protecting your database assets. This comprehensive guide covers setup, configuration, and best practices.

RMAN is a command-line and Enterprise Manager interface tool that provides:

  • Block-level backups - More efficient than file-level copies
  • Incremental backups - Only changed blocks since last backup
  • Compressed backups - Reduced storage requirements
  • Encryption support - Secure backup data
  • Automatic cleanup - Manages backup retention policies
  • Cross-platform support - Works across different OS platforms
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ RMAN Client │◄──►│ Target Database │◄──►│ Recovery Catalog │
│ (Command │ │ (Database to │ │ (Optional │
│ Interface) │ │ be backed up) │ │ Repository) │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│ │ │
▼ ▼ ▼
┌─────────────────────────────────────────────────────────────────┐
│ Backup Storage │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Disk │ │ Tape │ │ Cloud │ │
│ │ (Fast Media)│ │(Archive Media)│ │ (Object │ │
│ │ │ │ │ │ Storage) │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
└─────────────────────────────────────────────────────────────────┘
  • RMAN Client: Command-line tool or Enterprise Manager interface
  • Target Database: The database being backed up or recovered
  • Recovery Catalog: Optional centralized repository for backup metadata
  • Backup Media: Disk, tape, or cloud storage for backup files
-- Check current archivelog status
SELECT log_mode FROM v$database;
-- If NOARCHIVELOG, enable it:
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;
-- Verify
SELECT log_mode FROM v$database;
Terminal window
# Connect to RMAN
rman target /
# Basic configuration
CONFIGURE RETENTION POLICY TO REDUNDANCY 2;
CONFIGURE BACKUP OPTIMIZATION ON;
CONFIGURE DEFAULT DEVICE TYPE TO DISK;
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/backup/rman/%F';
-- Configure Fast Recovery Area (recommended)
ALTER SYSTEM SET db_recovery_file_dest_size = 50G;
ALTER SYSTEM SET db_recovery_file_dest = '/u01/app/oracle/fast_recovery_area';
-- Or configure specific backup location
CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/backup/rman/%U';
#!/bin/bash
# rman_setup.sh - Initial RMAN configuration
export ORACLE_SID=ORCL
export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
rman target / <<EOF
# Configure retention policy (keep 7 days of backups)
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
# Enable backup optimization
CONFIGURE BACKUP OPTIMIZATION ON;
# Configure compression
CONFIGURE COMPRESSION ALGORITHM 'MEDIUM';
# Set default backup location
CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/backup/rman/%U';
# Enable controlfile autobackup
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/backup/rman/cf_%F';
# Configure archivelog deletion policy
CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON STANDBY;
# Show configuration
SHOW ALL;
EOF
Section titled “Recovery Catalog Setup (Optional but Recommended)”
-- 1. Create recovery catalog database (separate from target)
-- 2. Create recovery catalog owner
CREATE USER rcat IDENTIFIED BY password
DEFAULT TABLESPACE catalog_ts
TEMPORARY TABLESPACE temp
QUOTA UNLIMITED ON catalog_ts;
-- 3. Grant privileges
GRANT RECOVERY_CATALOG_OWNER TO rcat;
-- 4. Create recovery catalog
rman catalog rcat/password@catalog_db
RMAN> CREATE CATALOG;
-- 5. Register target database
rman target sys/password@target_db catalog rcat/password@catalog_db
RMAN> REGISTER DATABASE;
Terminal window
# Daily incremental backup strategy
# Level 0 (full) - Weekly (Sunday)
# Level 1 (incremental) - Daily (Mon-Sat)
# Archive logs - Every 15 minutes
# Sunday - Level 0 backup
0 2 * * 0 /scripts/rman_level0_backup.sh
# Monday-Saturday - Level 1 backup
0 2 * * 1-6 /scripts/rman_level1_backup.sh
# Archive log backup every 15 minutes
*/15 * * * * /scripts/rman_archlog_backup.sh
-- Check backup status
SELECT
session_key,
input_type,
status,
start_time,
end_time,
elapsed_seconds/3600 elapsed_hours,
input_bytes/1024/1024/1024 input_gb,
output_bytes/1024/1024/1024 output_gb
FROM v$rman_backup_job_details
WHERE start_time >= SYSDATE - 7
ORDER BY start_time DESC;
rman_health_check.sh
#!/bin/bash
rman target / <<EOF
# Check for any corruption
BACKUP VALIDATE DATABASE;
# List recent backups
LIST BACKUP SUMMARY;
# Check obsolete backups
REPORT OBSOLETE;
# Check backup retention
REPORT NEED BACKUP;
# Verify backup files exist
CROSSCHECK BACKUP;
CROSSCHECK ARCHIVELOG ALL;
EOF
SettingRecommended ValuePurpose
RETENTION POLICYRECOVERY WINDOW 7 DAYSKeep 7 days of recovery capability
BACKUP OPTIMIZATIONONSkip identical backups
COMPRESSIONMEDIUMBalance compression vs speed
CONTROLFILE AUTOBACKUPONAutomatic control file protection
ARCHIVELOG DELETIONAPPLIED ON STANDBYSafe archivelog cleanup
MAXSETSIZE2GLimit backup piece size
FILESPERSET64Files per backup set
Terminal window
rman target / <<EOF
# Performance tuning
CONFIGURE DEVICE TYPE DISK PARALLELISM 4;
CONFIGURE CHANNEL DEVICE TYPE DISK MAXPIECESIZE 2G;
# Encryption (requires Oracle Advanced Security)
CONFIGURE ENCRYPTION FOR DATABASE ON;
CONFIGURE ENCRYPTION ALGORITHM 'AES256';
# Block change tracking (for faster incrementals)
SQL "ALTER DATABASE ENABLE BLOCK CHANGE TRACKING
USING FILE ''/u01/app/oracle/block_change_tracking.f''";
# Backup validation
CONFIGURE BACKUP OPTIMIZATION ON;
EOF
Terminal window
# Secure backup directory
chmod 750 /backup/rman
chown oracle:oinstall /backup/rman
# Secure RMAN scripts
chmod 700 /scripts/rman_*.sh
chown oracle:oinstall /scripts/rman_*.sh
Terminal window
# Wallet-based encryption
rman target / <<EOF
CONFIGURE ENCRYPTION FOR DATABASE ON;
CONFIGURE ENCRYPTION ALGORITHM 'AES256';
SET ENCRYPTION ON;
BACKUP DATABASE;
EOF

1. ORA-19809: Limit exceeded for recovery files

Section titled “1. ORA-19809: Limit exceeded for recovery files”
-- Check recovery area usage
SELECT * FROM v$recovery_area_usage;
-- Increase size or clean up
ALTER SYSTEM SET db_recovery_file_dest_size = 100G;
-- Or delete obsolete backups
RMAN> DELETE OBSOLETE;

2. RMAN-06059: Expected archived log not found

Section titled “2. RMAN-06059: Expected archived log not found”
-- Check for gaps
SELECT * FROM v$archive_gap;
-- Crosscheck and delete expired
RMAN> CROSSCHECK ARCHIVELOG ALL;
RMAN> DELETE EXPIRED ARCHIVELOG ALL;
Terminal window
# Check backup performance
SELECT
session_key,
input_bytes_per_sec/1024/1024 mb_per_sec,
compression_ratio
FROM v$rman_backup_job_details
WHERE end_time >= SYSDATE - 1;
rman_backup_with_alert.sh
#!/bin/bash
LOG_FILE="/tmp/rman_backup.log"
rman target / log=$LOG_FILE <<EOF
BACKUP DATABASE PLUS ARCHIVELOG;
EOF
if [ $? -ne 0 ]; then
mail -s "RMAN Backup Failed on $(hostname)" $EMAIL < $LOG_FILE
fi
  • Data Guard: RMAN automatically coordinates with standby databases
  • ASM: Seamless integration with Automatic Storage Management
  • Cloud: Native support for Oracle Cloud Object Storage
  • Enterprise Manager: Graphical interface and automated policies
  1. Backup Strategies - Design comprehensive backup plans
  2. Recovery Procedures - Learn recovery techniques
  3. RMAN Scripts Collection - Production-ready scripts
  4. Troubleshooting RMAN - Common issues and solutions
Terminal window
# Connect
rman target /
# Backup database
BACKUP DATABASE;
# Backup with compression
BACKUP AS COMPRESSED BACKUPSET DATABASE;
# Incremental backup
BACKUP INCREMENTAL LEVEL 1 DATABASE;
# List backups
LIST BACKUP;
# Restore and recover
RESTORE DATABASE;
RECOVER DATABASE;

This overview provides the foundation for implementing RMAN in your Oracle environment. Each section links to detailed procedures and script collections for specific tasks.