# 🧪 RMAN al Rescate: Guía completa de Backup y Recovery en Oracle 12c y 19c

## 🧪 La Botica del DBA – Edición Especial

> *"No hay nada más valioso que un backup… hasta que necesitas restaurarlo."*  
> — Todo DBA alguna vez.

---

🧠 **¿Por qué este artículo?**  
Porque como buen boticario del dato, debes tener a mano tus fórmulas magistrales. Aquí te comparto un **recetario práctico** para dominar Oracle RMAN en escenarios reales, desde respaldos simples hasta recuperación de catástrofes, clonación de bases y restauración puntual de tablas.

---

## 🛠️ Preparando la botica: configuración base de RMAN

```sql
CONFIGURE RETENTION POLICY TO REDUNDANCY 2;
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/u01/app/oracle/fast_recovery_area/%F';
CONFIGURE DEVICE TYPE DISK PARALLELISM 4;
```

---

## 💾 Fórmulas magistrales para backups

### 🔸 Backup completo

```sql
BACKUP DATABASE PLUS ARCHIVELOG;
```

### 🔸 Backup incremental

**Nivel 0 (completo):**

```sql
BACKUP INCREMENTAL LEVEL 0 DATABASE PLUS ARCHIVELOG;
```

**Nivel 1 (diferencial):**

```sql
BACKUP INCREMENTAL LEVEL 1 DATABASE PLUS ARCHIVELOG;
```

### 🔸 Backup de tablespaces específicos

```sql
BACKUP TABLESPACE users, example;
```

---

## 💥 Procedimientos de restauración

### 🔄 Recuperación completa

```sql
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
RESTORE DATABASE;
RECOVER DATABASE;
ALTER DATABASE OPEN;
```

### 📦 Restaurar tablespaces

```sql
RESTORE TABLESPACE users, example;
RECOVER TABLESPACE users, example;
```

### 🔍 Recuperar datafiles dañados

1. Identifica:
    

```sql
SELECT FILE#, STATUS, ERROR, CHANGE#, TIME FROM V$RECOVER_FILE;
```

2. Restaura y recupera:
    

```sql
RESTORE DATAFILE '/ruta/archivo.dbf';
RECOVER DATAFILE '/ruta/archivo.dbf';
```

---

## ⚙️ Casos especiales y avanzados

### 🧠 Restaurar controlfile perdido

```sql
STARTUP NOMOUNT;
RESTORE CONTROLFILE FROM AUTOBACKUP;
ALTER DATABASE MOUNT;
RESTORE DATABASE;
RECOVER DATABASE;
ALTER DATABASE OPEN RESETLOGS;
```

### 🔁 Pérdida total de redo logs

```sql
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE OPEN RESETLOGS;
```

### 📂 Restaurar archived logs

```sql
RESTORE ARCHIVELOG ALL;
```

---

## ⏳ Point-in-Time Recovery (PITR)

```sql
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
RUN {
  SET UNTIL TIME "TO_DATE('2023-05-15 14:00:00', 'YYYY-MM-DD HH24:MI:SS')";
  RESTORE DATABASE;
  RECOVER DATABASE;
}
ALTER DATABASE OPEN RESETLOGS;
```

---

## 🧬 Recuperación de una tabla eliminada

```sql
CREATE TABLE users_temp AS 
  SELECT * FROM users AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '1' DAY);

INSERT INTO users SELECT * FROM users_temp;
COMMIT;
DROP TABLE users_temp;
```

---

## 🔎 Verificación y mantenimiento de backups

```sql
CROSSCHECK BACKUP;
LIST BACKUP;
DELETE OBSOLETE;
VALIDATE BACKUPSET <backup_set_key>;
```

---

## 📂 Restauración de archivos segmentados o overflow

```sql
RESTORE DATAFILE <file_number>;
RECOVER DATAFILE <file_number>;

-- o

RESTORE DATAFILE '/path/to/overflow_file.dbf';
RECOVER DATAFILE '/path/to/overflow_file.dbf';
```

---

## 🚫 Tablespaces de solo lectura

```sql
BACKUP TABLESPACE read_only_tbs;
RESTORE TABLESPACE read_only_tbs;
RECOVER TABLESPACE read_only_tbs;
```

---

## 🧪 Clonación con RMAN

```sql
DUPLICATE TARGET DATABASE TO clone_db
  FROM ACTIVE DATABASE
  SPFILE
  SET DB_NAME='clone_db'
  SET DB_UNIQUE_NAME='clone_db'
  NOFILENAMECHECK;
```

---

## 🧾 Conclusión del boticario

Tener tus fórmulas listas no solo te salva de errores, te da paz.  
Estos scripts han sido **probados en entornos reales** y están listos para que los adaptes a tu laboratorio o producción.  
Recuérdalo siempre: **el DBA preparado es el DBA con buenas recetas y un buen boticario.**

---

## 📢 ¿Te gustaría más contenido práctico así?

a nuestra newsletter semanal en [LaBoticaDelDBA.com](https://laboticadeldba.com) y recibe dosis semanales de pasillas , recetas y elixires para DBAs.
