¿Qué es Oracle RMAN? (La Explicación de 30 Segundos)
RMAN significa Recovery Manager (Administrador de Recuperación). Es la herramienta integrada de Oracle para hacer backup, restaurar y recuperar bases de datos.
Piensa en RMAN como el guardaespaldas personal + máquina del tiempo de tu base de datos:
- 🛡️ Guardaespaldas: Protege tus datos de desastres
- ⏰ Máquina del Tiempo: Te permite viajar a cualquier punto en el tiempo
Antes de que existiera RMAN (pre-Oracle 8), los DBAs tenían que escribir scripts shell complejos, rastrear archivos manualmente y rezar para que todo funcionara durante la recuperación. RMAN lo cambió todo.
PITR y la recuperación a un tiempo/SCN entre backups requieren modo ARCHIVELOG. En NOARCHIVELOG aún puedes hacer backups offline, pero la recuperación generalmente se limita al último backup consistente (sin roll-forward con redo archivado). Verifica con: SELECT LOG_MODE FROM V$DATABASE;
¿Por Qué No Simplemente Copiar Archivos?
¡Buena pregunta! Aquí está por qué RMAN supera la copia manual de archivos:
| Característica | Backup Manual | RMAN |
|---|---|---|
| Manejo de Bloques | Copia TODOS los bloques (incluso vacíos) | ✅ Solo respalda bloques USADOS |
| Detección de Corrupción | ❌ Ninguna | ✅ Validación automática de bloques |
| Scripting | Scripts shell complejos requeridos | ✅ Comandos simples e intuitivos |
| Gestión de Catálogo | Seguimiento manual | ✅ Metadatos de backup automáticos |
| Recuperación | Manual, propenso a errores | ✅ Recuperación punto en tiempo integrada |
| Compresión | Herramientas externas necesarias | ✅ Compresión nativa |
🏗️ Arquitectura de RMAN
Entender cómo funcionan juntos los componentes de RMAN es crucial. Aquí está el panorama general:
Componentes Clave Explicados
| Componente | Descripción | ¿Requerido? |
|---|---|---|
| Cliente RMAN | Interfaz de línea de comandos con la que interactúas | ✅ Sí |
| Base de Datos Objetivo | La base de datos que se respalda/recupera | ✅ Sí |
| Catálogo de Recuperación | BD separada que almacena metadatos de backup | Opcional (recomendado) |
| Canales | Procesos del servidor que realizan operaciones I/O | ✅ Sí (auto-asignados) |
| Gestión de Medios | Interfaz hacia almacenamiento en cinta/nube | Opcional |
Conceptos Fundamentales: Los Bloques de Construcción
Antes de sumergirnos en los comandos, establezcamos el vocabulario. Confía en mí, esto te ahorrará horas de confusión después.
1. Base de Datos Objetivo (Target)
La base de datos que deseas respaldar o recuperar. Cuando conectas RMAN a una base de datos, te estás conectando a un "target".
rman target /
# or
rman target sys/password@orcl
2. Catálogo de Recuperación (Opcional pero Recomendado)
Una base de datos separada que almacena metadatos sobre tus backups. Piensa en él como la memoria externa de RMAN.
Sin catálogo: RMAN almacena información en el control file de la base de datos objetivo (historial limitado)
Con catálogo: Historial ilimitado, gestión centralizada para múltiples bases de datos
3. Backup Sets vs. Image Copies
¡Este es un concepto crítico! Entender cuándo usar cada uno puede impactar significativamente tu estrategia de backup.
-- Backup Set (default)
BACKUP DATABASE;
-- Image Copy
BACKUP AS COPY DATABASE;
4. Canales (Channels)
Los canales son los trabajadores que realizan las operaciones de backup/restauración. Más canales = procesamiento paralelo = backups más rápidos.
RUN {
ALLOCATE CHANNEL c1 DEVICE TYPE DISK;
ALLOCATE CHANNEL c2 DEVICE TYPE DISK;
ALLOCATE CHANNEL c3 DEVICE TYPE DISK;
ALLOCATE CHANNEL c4 DEVICE TYPE DISK;
BACKUP DATABASE;
}
5. Backups Incrementales
¿Por qué respaldar todo cada vez? Los backups incrementales solo capturan cambios.
- Level 0: Backup completo (la línea base) - respalda todos los bloques que alguna vez se han usado
- Level 1 Diferencial (por defecto): Cambios desde el último Level 0 O Level 1
- Level 1 Acumulativo: Todos los cambios desde el último Level 0 solamente (usa la palabra clave
CUMULATIVE)
Level 0
100 GB"] MON["MON
Level 1
5 GB"] TUE["TUE
Level 1
8 GB"] WED["WED
Level 1
3 GB"] THU["THU
Level 1
6 GB"] FRI["FRI
Level 1
4 GB"] SAT["SAT
Level 1
7 GB"] end SUN --> MON --> TUE --> WED --> THU --> FRI --> SAT SAT -.->|Next Week| SUN2["☀️ SUN
Level 0
100 GB"] style SUN fill:#f59e0b,stroke:#d97706,color:#000,stroke-width:2px style SUN2 fill:#f59e0b,stroke:#d97706,color:#000,stroke-width:2px style MON fill:#4ecdc4,stroke:#14b8a6,color:#000,stroke-width:2px style TUE fill:#4ecdc4,stroke:#14b8a6,color:#000,stroke-width:2px style WED fill:#4ecdc4,stroke:#14b8a6,color:#000,stroke-width:2px style THU fill:#4ecdc4,stroke:#14b8a6,color:#000,stroke-width:2px style FRI fill:#4ecdc4,stroke:#14b8a6,color:#000,stroke-width:2px style SAT fill:#4ecdc4,stroke:#14b8a6,color:#000,stroke-width:2px
🎬 Tu Primera Sesión RMAN
¡Manos a la obra! Abre tu terminal y sigue adelante.
Conectar a RMAN
# Conectar como SYSDBA a la base de datos local
$ rman target /
Recovery Manager: Release 19.0.0.0.0 - Production
Copyright (c) 1982, 2019, Oracle. All rights reserved.
connected to target database: ORCL (DBID=1234567890)
RMAN>
¡Ya estás dentro! El prompt RMAN> es donde ocurre la magia.
Verificar el Estado de tu Base de Datos
RMAN> REPORT SCHEMA;
Report of database schema for database with db_unique_name ORCL
List of Permanent Datafiles
===========================
File Size(MB) Tablespace RB segs Datafile Name
---- -------- -------------------- ------- ------------------------
1 900 SYSTEM YES /u01/oradata/ORCL/system01.dbf
2 500 SYSAUX NO /u01/oradata/ORCL/sysaux01.dbf
3 100 UNDOTBS1 YES /u01/oradata/ORCL/undotbs01.dbf
4 50 USERS NO /u01/oradata/ORCL/users01.dbf
Configurar Ajustes de RMAN
-- Establecer destino de backup
RMAN> CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/u01/backup/%U';
-- Enable automatic control file backup (CRITICAL!)
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;
-- Set retention policy (keep 7 days)
RMAN> CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
-- Enable compression (saves 50-75% space)
RMAN> CONFIGURE DEVICE TYPE DISK BACKUP TYPE TO COMPRESSED BACKUPSET;
-- View all configurations
RMAN> SHOW ALL;
¡Tu Primer Backup Completo! 🎉
RMAN> BACKUP DATABASE PLUS ARCHIVELOG;
Starting backup at 12-DEC-24
current log archived
using channel ORA_DISK_1
channel ORA_DISK_1: starting archived log backup set
channel ORA_DISK_1: specifying archived log(s) in backup set
...
channel ORA_DISK_1: backup set complete, elapsed time: 00:02:35
Finished backup at 12-DEC-24
Acabas de respaldar toda tu base de datos. Déjalo asimilar — un solo comando protegió gigabytes de datos críticos.
Comandos Esenciales de RMAN: Tu Kit de Herramientas Diario
Aquí están los comandos que usarás el 90% del tiempo:
Comandos de Backup
-- Full database backup
BACKUP DATABASE;
-- Database + archive logs (recommended for production)
BACKUP DATABASE PLUS ARCHIVELOG;
-- Only specific tablespace
BACKUP TABLESPACE users;
-- Only specific datafile
BACKUP DATAFILE 4;
-- Archive logs only
BACKUP ARCHIVELOG ALL;
-- Incremental backups
BACKUP INCREMENTAL LEVEL 0 DATABASE; -- baseline (full)
BACKUP INCREMENTAL LEVEL 1 DATABASE; -- changes only
-- Compressed backup (saves 50-75% space!)
BACKUP AS COMPRESSED BACKUPSET DATABASE;
-- Tag your backups for easy identification
BACKUP DATABASE TAG 'WEEKLY_FULL_20241212';
Listado y Reportes
-- List all backups
LIST BACKUP;
-- List backups of specific database
LIST BACKUP OF DATABASE;
-- List backup of tablespace
LIST BACKUP OF TABLESPACE users;
-- Find files needing backup
REPORT NEED BACKUP;
-- Find obsolete backups (based on retention)
REPORT OBSOLETE;
-- Check for corruptions (DO THIS REGULARLY!)
VALIDATE DATABASE;
Comandos de Mantenimiento
-- Delete obsolete backups (based on retention policy)
DELETE OBSOLETE;
-- Delete specific backup
DELETE BACKUPSET 123;
-- Crosscheck (verify backups still exist on disk)
CROSSCHECK BACKUP;
-- Remove catalog entries for missing files
DELETE EXPIRED BACKUP;
🆘 Escenarios de Recuperación: Cuando las Cosas Salen Mal
Aquí es donde RMAN realmente brilla. Cuando ocurre un desastre, usa este árbol de decisión:
Escenario 1: Recuperación Completa de Base de Datos
Tu base de datos falló. El servidor se reinició. Es hora de recuperar.
-- Start database in mount mode
RMAN> STARTUP MOUNT;
-- Restore all datafiles from backup
RMAN> RESTORE DATABASE;
-- Apply all archived logs to catch up to failure point
RMAN> RECOVER DATABASE;
-- Open the database
RMAN> ALTER DATABASE OPEN;
Si perdiste el control file (o está corrupto) y habilitaste CONFIGURE CONTROLFILE AUTOBACKUP ON, generalmente puedes restaurarlo primero, luego proceder con restore/recover.
-- If you know DBID (recommended to record it!)
RMAN> SET DBID 1234567890;
RMAN> STARTUP NOMOUNT;
RMAN> RESTORE CONTROLFILE FROM AUTOBACKUP;
RMAN> ALTER DATABASE MOUNT;
RMAN> RESTORE DATABASE;
RMAN> RECOVER DATABASE;
RMAN> ALTER DATABASE OPEN;
Escenario 2: Recuperación de un Solo Datafile (¡Base de Datos Online!)
Un solo datafile se corrompió, pero la base de datos sigue funcionando.
-- Take the datafile offline (use IMMEDIATE if file is corrupted/inaccessible)
RMAN> SQL 'ALTER DATABASE DATAFILE 4 OFFLINE IMMEDIATE';
-- Restore just that file
RMAN> RESTORE DATAFILE 4;
-- Recover to current point (applies all archived logs)
RMAN> RECOVER DATAFILE 4;
-- Bring it back online
RMAN> SQL 'ALTER DATABASE DATAFILE 4 ONLINE';
Los usuarios en otros tablespaces continúan trabajando mientras arreglas el archivo corrupto.
Escenario 3: Recuperación Punto en el Tiempo (¡La Máquina del Tiempo!)
Alguien accidentalmente eliminó una tabla crítica a las 14:30. Ahora son las 15:00.
-- Shut down and mount
RMAN> SHUTDOWN IMMEDIATE;
RMAN> STARTUP MOUNT;
-- Restore to just before the disaster
RMAN> RUN {
SET UNTIL TIME "to_date('2024-12-12 14:25:00','YYYY-MM-DD HH24:MI:SS')";
RESTORE DATABASE;
RECOVER DATABASE;
}
-- Alternative: use NLS_DATE_FORMAT compatible string
-- SET UNTIL TIME '12-DEC-2024 14:25:00';
-- Open with reset logs (required after incomplete recovery)
RMAN> ALTER DATABASE OPEN RESETLOGS;
OPEN RESETLOGS crea una nueva encarnación y descarta el redo más allá del tiempo/SCN objetivo. Toma un backup completo fresco inmediatamente después de una recuperación incompleta.
⭐ Mejores Prácticas de RMAN
1. Siempre Respalda el Control File y SPFILE
-- Enable automatic controlfile backup (includes SPFILE)
CONFIGURE CONTROLFILE AUTOBACKUP ON;
-- Then every backup automatically includes controlfile + spfile
BACKUP DATABASE PLUS ARCHIVELOG;
-- Or explicitly backup spfile separately
BACKUP SPFILE;
Sin estos, la recuperación se vuelve significativamente más difícil. La configuración CONTROLFILE AUTOBACKUP asegura que siempre tengas un controlfile y SPFILE recuperables.
2. Usa Block Change Tracking para Incrementales Más Rápidos
-- Enable (one-time setup)
ALTER DATABASE ENABLE BLOCK CHANGE TRACKING
USING FILE '/u01/oradata/ORCL/bct.dbf';
3. Valida tus Backups Regularmente
-- Check backup integrity without restoring
RESTORE DATABASE VALIDATE;
RESTORE ARCHIVELOG ALL VALIDATE;
-- Validate with logical corruption check (more thorough)
RESTORE DATABASE VALIDATE CHECK LOGICAL;
-- Validate specific backup set
VALIDATE BACKUPSET 123;
-- Validate entire database for physical/logical corruption
VALIDATE DATABASE;
Un backup que no se puede restaurar NO ES un backup. ¡Valida semanalmente!
4. Usa Optimización de Backup
CONFIGURE BACKUP OPTIMIZATION ON;
RMAN omite archivos que no han cambiado desde el último backup.
5. Implementa una Política de Retención Sensata
-- Keep backups for 30 days
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 30 DAYS;
-- OR keep last 3 backups
CONFIGURE RETENTION POLICY TO REDUNDANCY 3;
6. Prueba la Recuperación Trimestralmente
La mejor estrategia de backup es inútil si no puedes restaurar. Programa simulacros de recuperación trimestrales.
🚀 Temas Avanzados
Una vez que hayas dominado los conceptos básicos, estas características avanzadas llevarán tu estrategia de backup al siguiente nivel.
1. Backups Encriptados con RMAN
Protege tus backups del acceso no autorizado con encriptación. Oracle soporta tres modos de encriptación:
| Modo | Gestión de Claves | Caso de Uso |
|---|---|---|
| Transparente (TDE) | Oracle Wallet / Key Vault | Entornos de producción con TDE ya habilitado |
| Basado en Contraseña | Contraseña proporcionada por usuario | Envío de backups a terceros |
| Modo Dual | Wallet + Contraseña | Máxima flexibilidad para recuperación ante desastres |
-- Configure transparent encryption (requires TDE wallet)
CONFIGURE ENCRYPTION FOR DATABASE ON;
CONFIGURE ENCRYPTION ALGORITHM 'AES256';
-- Password-based encryption for a single backup
RMAN> SET ENCRYPTION ON IDENTIFIED BY 'MySecurePassword123' ONLY;
RMAN> BACKUP DATABASE;
-- Dual-mode encryption (can restore with wallet OR password)
RMAN> SET ENCRYPTION ON IDENTIFIED BY 'MySecurePassword123';
RMAN> BACKUP DATABASE;
-- Restore encrypted backup with password
RMAN> SET DECRYPTION IDENTIFIED BY 'MySecurePassword123';
RMAN> RESTORE DATABASE;
Si pierdes la contraseña de encriptación y no tienes el wallet, tus backups son permanentemente irrecuperables. ¡Almacena las contraseñas de forma segura en una bóveda o gestor de contraseñas!
2. Backups de Arquitectura Multitenant (CDB/PDB)
Oracle 12c+ introdujo la arquitectura multitenant. Aquí está cómo respaldar Container Databases y Pluggable Databases:
-- Connect to CDB root
$ rman target sys/password@cdb1
-- Backup entire CDB (includes all PDBs)
RMAN> BACKUP DATABASE PLUS ARCHIVELOG;
-- Backup specific PDB only
RMAN> BACKUP PLUGGABLE DATABASE pdb1;
-- Backup tablespace within a PDB
RMAN> BACKUP TABLESPACE pdb1:users;
-- Recover a single PDB to point-in-time
RMAN> RUN {
SET UNTIL TIME "to_date('2024-12-12 14:00:00','YYYY-MM-DD HH24:MI:SS')";
RESTORE PLUGGABLE DATABASE pdb1;
RECOVER PLUGGABLE DATABASE pdb1;
ALTER PLUGGABLE DATABASE pdb1 OPEN RESETLOGS;
}
Desde Oracle 12.2+, puedes realizar recuperación punto en tiempo en PDBs individuales sin afectar otras PDBs en la CDB. ¡Esto es revolucionario para entornos multitenant!
3. Integración con Data Guard
En entornos Data Guard, puedes descargar los backups a la base de datos standby, reduciendo la carga en producción:
-- On STANDBY database: Enable backup mode
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
-- Connect RMAN to standby
$ rman target sys/password@standby_db
-- Backup from standby (preferred for large databases)
RMAN> BACKUP DATABASE PLUS ARCHIVELOG;
-- Resume managed recovery
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT;
-- IMPORTANT: Register backup in primary's catalog
$ rman target sys/password@primary_db
RMAN> CATALOG START WITH '/standby/backup/location/';
Con Active Data Guard, puedes hacer backup desde un standby de solo lectura sin detener la recuperación, proporcionando backups de impacto cero en tu base de datos primaria de producción.
4. Integración Cloud (OCI Object Storage)
Los backups a almacenamiento de objetos típicamente se hacen a través de una biblioteca de gestión de medios SBT (módulo Oracle o de terceros). Los parámetros exactos de instalación varían según la versión de Oracle y el release del módulo, así que trata el paso de instalación como específico del proveedor y verifica con la documentación oficial.
-- Install Oracle Database Backup Cloud Module
-- (Vendor-specific) Install the cloud backup module to obtain:
-- 1) an SBT library (e.g., libopc.so) and 2) a config file (e.g., opc.ora)
-- Configure RMAN for OCI backup
RMAN> CONFIGURE CHANNEL DEVICE TYPE SBT PARMS
'SBT_LIBRARY=/u01/app/oracle/lib/libopc.so,
SBT_PARMS=(OPC_PFILE=/u01/app/oracle/wallet/opc.ora)';
-- Backup to OCI Object Storage
RMAN> BACKUP DEVICE TYPE SBT DATABASE PLUS ARCHIVELOG;
-- Hybrid approach: Local + Cloud
RMAN> BACKUP DATABASE PLUS ARCHIVELOG; -- Local (fast recovery)
RMAN> BACKUP DEVICE TYPE SBT BACKUPSET ALL
NOT BACKED UP 1 TIMES; -- Backup-of-backupset (replicate to object storage)
5. Configuración del Fast Recovery Area (FRA)
El Fast Recovery Area es el enfoque recomendado por Oracle para gestionar todos los archivos relacionados con la recuperación:
-- Configure FRA location and size
ALTER SYSTEM SET DB_RECOVERY_FILE_DEST = '/u01/fra' SCOPE=BOTH;
ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE = 500G SCOPE=BOTH;
-- FRA automatically manages:
-- • Archived redo logs
-- • RMAN backups (when using default location)
-- • Flashback logs
-- • Control file autobackups
-- Monitor FRA usage
SELECT
NAME,
SPACE_LIMIT/1024/1024/1024 AS SIZE_GB,
SPACE_USED/1024/1024/1024 AS USED_GB,
ROUND(SPACE_USED/SPACE_LIMIT*100,2) AS PCT_USED
FROM V$RECOVERY_FILE_DEST;
-- Check what's consuming FRA space
SELECT
FILE_TYPE,
PERCENT_SPACE_USED AS PCT_USED,
NUMBER_OF_FILES AS NUM_FILES
FROM V$RECOVERY_AREA_USAGE;
🤖 Scripts de Automatización
Los entornos de producción necesitan backups automatizados y programados. Aquí están scripts listos para usar:
DELETE INPUT (Lee Esto Antes de Copiar/Pegar)DELETE INPUT elimina los archived redo logs después de respaldarlos. Esto es común, pero solo es seguro si coincide con tu diseño de HA/DR.
- Data Guard: asegúrate de que los archived logs se envíen y apliquen a los standbys requeridos antes de eliminarlos (considera
CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON ALL STANDBY;). - Backups offsite: asegúrate de que los archivelogs se respalden a tu medio requerido (disco/cinta/cloud) y se verifiquen según la retención/RPO.
- Seguridad operacional: si no estás seguro, elimina
DELETE INPUTy gestiona la eliminación de logs por separado.
Script Shell Linux/Unix
#!/bin/bash
#############################################
# RMAN Automated Backup Script
# Schedule with cron: 0 2 * * * /scripts/rman_backup.sh
#############################################
# Environment variables
export ORACLE_SID=ORCL
export ORACLE_HOME=/u01/app/oracle/product/19c/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH
# Directories
BACKUP_DIR=/u01/backup
LOG_DIR=/u01/backup/logs
DATE=$(date +%Y%m%d_%H%M%S)
LOG_FILE=$LOG_DIR/rman_backup_$DATE.log
# Create log directory if not exists
mkdir -p $LOG_DIR
# Determine backup type based on day of week
DOW=$(date +%u)
if [ $DOW -eq 7 ]; then
BACKUP_TYPE="INCREMENTAL LEVEL 0"
BACKUP_TAG="WEEKLY_L0_$DATE"
else
BACKUP_TYPE="INCREMENTAL LEVEL 1"
BACKUP_TAG="DAILY_L1_$DATE"
fi
# Execute RMAN backup
rman target / <<EOF >> $LOG_FILE 2>&1
RUN {
ALLOCATE CHANNEL c1 DEVICE TYPE DISK;
ALLOCATE CHANNEL c2 DEVICE TYPE DISK;
BACKUP $BACKUP_TYPE DATABASE
TAG '$BACKUP_TAG'
FORMAT '$BACKUP_DIR/%U';
BACKUP ARCHIVELOG ALL
NOT BACKED UP 1 TIMES
TAG 'ARCH_$DATE'
DELETE INPUT;
DELETE NOPROMPT OBSOLETE;
RELEASE CHANNEL c1;
RELEASE CHANNEL c2;
}
EXIT;
EOF
# Check for errors
if grep -i "RMAN-" $LOG_FILE | grep -v "RMAN-08138"; then
echo "RMAN Backup FAILED - Check $LOG_FILE" | mail -s "RMAN Backup FAILED: $ORACLE_SID" [email protected]
else
echo "RMAN Backup completed successfully" >> $LOG_FILE
fi
Script PowerShell para Windows
# RMAN Automated Backup Script for Windows
# Schedule with Task Scheduler
$env:ORACLE_SID = "ORCL"
$env:ORACLE_HOME = "C:\app\oracle\product\19c\dbhome_1"
$env:PATH = "$env:ORACLE_HOME\bin;$env:PATH"
$BackupDir = "D:\backup"
$LogDir = "D:\backup\logs"
$Date = Get-Date -Format "yyyyMMdd_HHmmss"
$LogFile = "$LogDir\rman_backup_$Date.log"
# Create directories
New-Item -ItemType Directory -Force -Path $LogDir | Out-Null
# Determine backup type
$DayOfWeek = (Get-Date).DayOfWeek
if ($DayOfWeek -eq "Sunday") {
$BackupType = "INCREMENTAL LEVEL 0"
$BackupTag = "WEEKLY_L0_$Date"
} else {
$BackupType = "INCREMENTAL LEVEL 1"
$BackupTag = "DAILY_L1_$Date"
}
# RMAN script content
$RmanScript = @"
RUN {
ALLOCATE CHANNEL c1 DEVICE TYPE DISK;
ALLOCATE CHANNEL c2 DEVICE TYPE DISK;
BACKUP $BackupType DATABASE
TAG '$BackupTag'
FORMAT '$BackupDir\%U';
BACKUP ARCHIVELOG ALL
NOT BACKED UP 1 TIMES
TAG 'ARCH_$Date'
DELETE INPUT;
DELETE NOPROMPT OBSOLETE;
}
EXIT;
"@
# Execute RMAN
$RmanScript | & rman target / | Out-File $LogFile -Encoding UTF8
# Check for errors
if (Select-String -Path $LogFile -Pattern "RMAN-" -SimpleMatch) {
Send-MailMessage -To "[email protected]" -From "[email protected]" `
-Subject "RMAN Backup FAILED: $env:ORACLE_SID" `
-Body "Check log: $LogFile" -SmtpServer "smtp.company.com"
}
Scripts Almacenados en RMAN (Catálogo)
Almacena scripts usados frecuentemente en el catálogo de recuperación para consistencia entre bases de datos:
-- Connect to catalog
$ rman target / catalog rman/password@catdb
-- Create a stored script
RMAN> CREATE SCRIPT full_backup {
BACKUP INCREMENTAL LEVEL 0 DATABASE PLUS ARCHIVELOG;
DELETE NOPROMPT OBSOLETE;
}
-- Create an incremental script
RMAN> CREATE SCRIPT incr_backup {
BACKUP INCREMENTAL LEVEL 1 DATABASE;
BACKUP ARCHIVELOG ALL NOT BACKED UP 1 TIMES DELETE INPUT;
}
-- List all stored scripts
RMAN> LIST SCRIPT NAMES;
-- Execute a stored script
RMAN> RUN { EXECUTE SCRIPT full_backup; }
-- Execute from command line
$ rman target / catalog rman/password@catdb <<EOF
RUN { EXECUTE SCRIPT incr_backup; }
EOF
Una programación típica empresarial:
- Domingo 2:00 AM: Backup Level 0 (Completo)
- Lun-Sáb 2:00 AM: Backup Level 1 (Incremental)
- Cada 30 minutos: Backup de archive logs
- Mensual: Backup completo a cinta/cloud para retención a largo plazo
🔧 Errores Comunes de RMAN y Soluciones
ORA-19502: Write error on file, block number
Causa: Disco lleno o problema de permisos
Solución: Verifica el espacio en disco y los permisos en el destino de backup
df -h /u01/backup/
ls -la /u01/backup/
RMAN-06059: Expected archived log not found
Causa: Faltan archive logs necesarios para la recuperación
Solución: Verifica si los logs fueron eliminados. Si usas Data Guard, obtén del standby.
LIST ARCHIVELOG ALL;
ORA-01152: File not restored from a sufficiently old backup
Causa: El datafile es más nuevo que el backup siendo restaurado
Solución: Usa un backup más reciente o restaura a un punto posterior en el tiempo
RMAN-06004: Recovery Manager error
Causa: Muchas causas posibles
Solución: Revisa la pila completa de errores y el alert log de Oracle
tail -100 $ORACLE_BASE/diag/rdbms/orcl/ORCL/trace/alert_ORCL.log
ORA-19809 / ORA-19804: Recovery area full
Causa: El Fast Recovery Area (FRA) ha alcanzado su límite de tamaño
Solución: Elimina backups obsoletos, aumenta el tamaño del FRA, o mueve backups a cinta
-- Check FRA usage
SELECT * FROM V$RECOVERY_FILE_DEST;
-- Delete obsolete backups to free space
RMAN> DELETE OBSOLETE;
-- Or increase FRA size
ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE = 200G;
RMAN-06023: No backup or copy of datafile found
Causa: RMAN no puede encontrar un backup para el datafile solicitado
Solución: Verifica que el backup existe y es accesible; cataloga backups si fueron reubicados
-- List available backups
LIST BACKUP OF DATAFILE 4;
-- Catalog backups from a directory (if moved)
CATALOG START WITH '/new/backup/location/';
📋 Referencia Rápida: Hoja de Trucos RMAN
¡Guarda esto para tu pared! 📌
CONNECT
rman target /rman target sys/pwd@db catalog rman/pwd@catdb
BACKUP
BACKUP DATABASE PLUS ARCHIVELOG;BACKUP INCREMENTAL LEVEL 0 DATABASE;BACKUP INCREMENTAL LEVEL 1 DATABASE;BACKUP AS COMPRESSED BACKUPSET DATABASE;BACKUP TABLESPACE users;BACKUP CURRENT CONTROLFILE;
RESTORE & RECOVER
RESTORE DATABASE;RECOVER DATABASE;RESTORE TABLESPACE users;RECOVER TABLESPACE users;
REPORTING
LIST BACKUP;LIST BACKUP OF DATABASE;REPORT NEED BACKUP;REPORT OBSOLETE;REPORT SCHEMA;
MAINTENANCE
CROSSCHECK BACKUP;DELETE OBSOLETE;DELETE EXPIRED BACKUP;
VALIDATION
VALIDATE DATABASE;VALIDATE BACKUPSET 123;RESTORE DATABASE VALIDATE;RESTORE DATABASE VALIDATE CHECK LOGICAL;
CONFIGURATION
SHOW ALL;CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;CONFIGURE CONTROLFILE AUTOBACKUP ON;CONFIGURE BACKUP OPTIMIZATION ON;
ENCRYPTION
CONFIGURE ENCRYPTION FOR DATABASE ON;SET ENCRYPTION ON IDENTIFIED BY 'password' ONLY;SET DECRYPTION IDENTIFIED BY 'password';
MULTITENANT (CDB/PDB)
BACKUP PLUGGABLE DATABASE pdb1;RESTORE PLUGGABLE DATABASE pdb1;RECOVER PLUGGABLE DATABASE pdb1;BACKUP TABLESPACE pdb1:users;
🎯 Conclusión: Tu Viaje con RMAN Comienza Aquí
RMAN puede parecer intimidante al principio, pero es genuinamente una de las herramientas más poderosas en el arsenal de un DBA. Lo que cubrimos hoy:
- ✅ Qué es RMAN — La solución integrada de backup y recuperación de Oracle
- ✅ Arquitectura — Cómo funcionan juntos todos los componentes
- ✅ Conceptos fundamentales — Backup sets, image copies, canales, incrementales
- ✅ Comandos esenciales — Backup, restore, recover, list, report
- ✅ Escenarios de recuperación — Desde archivo único hasta punto en tiempo
- ✅ Mejores prácticas — Consejos que separan buenos DBAs de los excelentes
- ✅ Temas avanzados — Encriptación, CDB/PDB, Data Guard, integración Cloud
- ✅ Automatización — Scripts de backup listos para producción
Tus Próximos Pasos
- Configura un entorno de pruebas — ¡Nunca practiques en producción!
- Ejecuta tu primer backup —
BACKUP DATABASE PLUS ARCHIVELOG; - Prueba la recuperación — Restaura en una ubicación diferente
- Documenta tus procedimientos — Tu yo del futuro te lo agradecerá
- Automatiza con scripts — Programa backups con cron/Task Scheduler
"Los backups no valen nada. Las restauraciones no tienen precio." — Cada DBA que ha pasado por un desastre
El mejor momento para aprender RMAN fue ayer. El segundo mejor momento es ahora mismo.
RMAN es poderoso, pero cuando los backups fallan o no existen, necesitas herramientas especializadas. DBRECOVER for Oracle puede extraer datos directamente de datafiles corruptos sin requerir una instancia en ejecución, control files o redo logs — el último recurso para la recuperación de bases de datos.