DBAtlas · Atlas de operaciones de bases de datos

Restore y recovery con RMAN

OracleNivel: AvanzadoDuración: 30 min – varias horas (según el tamaño de la base de datos)

Le guía paso a paso por la recuperación RMAN correcta en el momento del fallo: 19 escenarios — pérdida de un datafile, SYSTEM/UNDO, tempfile, bloques corruptos, online redo log, controlfile y spfile; restore completo, restore a otro directorio/ASM y a otro servidor; recuperación a un punto en el tiempo (PITR de CDB o de PDB), Flashback Database, PITR de tablespace, recuperación de una sola tabla (RECOVER TABLE), PDB eliminada; restore por red desde Data Guard (FROM SERVICE), restore solo de archive logs, registro de backups movidos (CATALOG) y un ensayo que no escribe datos (PREVIEW/VALIDATE). Cada escenario sigue el orden diagnóstico → red de seguridad → aplicación → verificación → nuevo backup, con pasos separados para instancia única, Oracle Restart y RAC (recuperación en una sola instancia con CLUSTER_DATABASE=FALSE). Trata la recuperación, no la toma de backups; para el plan de backup consulte la guía "Estrategia de backup de Oracle".

Topología: 1 servidor (instancia única u Oracle Restart) o RAC; origen + destino en el escenario de nuevo host

Escenarios

  • Ensayo: RESTORE … PREVIEW / VALIDATE (no cambia nada) — No hay nada roto; quiere comprobar, sin escribir datos, que los backups realmente bastan para una recuperación (la base de datos sigue abierta). También es el primer paso del simulacro mensual de restore y cuando no está seguro de qué escenario elegir.
  • Backups movidos a otro directorio / RMAN no encuentra el backup (CATALOG) — Las piezas de backup existen pero RMAN no las conoce (se movieron, cambió el NFS, vienen de otro servidor): recibe RMAN-06023/06025. La base de datos sigue abierta.
  • Restaurar solo archive logs (RESTORE ARCHIVELOG) — Necesita en disco los archive logs de un rango de secuencias concreto para LogMiner, un gap del standby o una recuperación manual; la base de datos sigue abierta y no se sobrescribe ningún archivo.
  • Pérdida/corrupción de un solo datafile o tablespace (la base de datos sigue abierta) — La base de datos está abierta y solo un datafile o tablespace no se puede leer (ORA-01157/01110/01116); todo lo demás funciona. Si el archivo pertenece a SYSTEM/UNDO elija la tarjeta "SYSTEM o UNDO", si es un tempfile la tarjeta "Tempfile", y si el archivo se abre pero algunos bloques están corruptos (ORA-01578) la tarjeta "Bloque corrupto".
  • Hay bloques corruptos (ORA-01578, block media recovery) — Una consulta devuelve ORA-01578/ORA-26040, el backup se detiene con ORA-19566 o VALIDATE encontró bloques corruptos; el resto del archivo está sano. La base de datos sigue abierta y solo se reparan los bloques corruptos (Enterprise Edition; en SE2 se restaura el archivo). Si el archivo entero no se puede abrir (ORA-01157), use la tarjeta "Un solo datafile".
  • Datafile de SYSTEM o UNDO perdido (la base de datos no abre) — El archivo perdido o corrupto pertenece al tablespace SYSTEM o UNDO: no se puede poner offline, la base de datos (o solo esa PDB si es un archivo de PDB) se cierra y se restaura en MOUNT. No hay pérdida de datos. Si es un archivo de otro tablespace, la tarjeta "Un solo datafile" lo resuelve sin cerrar la base de datos.
  • Tempfile perdido o corrupto (tablespace TEMP) — Las operaciones de ordenación/hash devuelven ORA-01157/ORA-01187/ORA-25153 y el archivo es un tempfile (el número del mensaje de error es mayor que el valor de db_files, p. ej. data file 201). No hace falta restore; se añade un tempfile nuevo y la base de datos sigue abierta.
  • Online redo log perdido o corrupto — En el alert log aparece ORA-00313/00312 (no se puede abrir) u ORA-00327/00366/00367 (corrupto). Si falta un miembro o el grupo está INACTIVE, la base de datos sigue abierta; si se pierde el grupo CURRENT hace falta restore + RESETLOGS y se pierden las últimas transacciones. El paso de diagnóstico muestra el estado del grupo; elija en consecuencia.
  • Todas las copias del controlfile perdidas — En la fase MOUNT la instancia no encuentra o no puede leer el controlfile (ORA-00205/00202/00210); los datafiles y el redo están sanos. Si una de las copias está sana no hace falta restore (lo muestra el paso de diagnóstico); si se han perdido todas, se restaura desde el autobackup y se abre con RESETLOGS; como el online redo está sano, no hay pérdida de datos.
  • spfile perdido — El spfile se borró o se corrompió; la instancia no arranca (ORA-01078/LRM-00109) o está arrancada pero el archivo no existe. No se tocan los datafiles y no hay pérdida de datos; si la instancia sigue arrancada, tampoco hay interrupción del servicio.
  • Restore completo, mismo servidor (datafiles perdidos; controlfile y redo sanos) — Se han perdido todos o la mayoría de los datafiles, y el controlfile y los online redo logs están sanos; la base de datos se cierra y no hay pérdida de datos. Si el disco/directorio antiguo de los archivos ya no se puede usar elija la tarjeta "a otro directorio", si también falta el controlfile primero la tarjeta "controlfile", y si el servidor se ha perdido por completo la tarjeta "Restore a otro servidor".
  • Disco perdido: restaurar la base de datos en otro directorio / ASM (SET NEWNAME) — El disco o el grupo de discos donde estaban los datafiles no se puede usar; el controlfile y el redo están sanos. Los archivos se restauran en un directorio nuevo o en un grupo de discos ASM, la base de datos se cierra y no hay pérdida de datos.
  • Volver a un momento / SCN (PITR, RESETLOGS) — DELETE/UPDATE/TRUNCATE erróneo o versión de aplicación defectuosa: lleva la base de datos (o solo la PDB) a un momento pasado; se pierden todos los cambios posteriores a ese momento (RESETLOGS). Antes considere vías más acotadas: una sola tabla → "Recuperar una sola tabla", un solo tablespace → TSPITR, flashback activado → "Flashback Database" (no restaura, es mucho más rápido).
  • Rebobinar con Flashback Database (restore point / SCN / tiempo) — Flashback está activado o existe un guaranteed restore point y no falta ningún archivo: se rebobina en minutos sin restore (Enterprise Edition). Requiere RESETLOGS. Para saber si está activado: SELECT flashback_on FROM v$database; → YES, o una fila con GUARANTEE_FLASHBACK_DATABASE = YES en v$restore_point.
  • Devolver un tablespace a un momento pasado (TSPITR) — La operación errónea solo afectó a objetos de un tablespace; el resto de la base de datos debe quedarse en el presente (Enterprise Edition). El tablespace queda offline durante la operación y todos sus objetos vuelven al momento objetivo; si solo se vieron afectadas una o dos tablas, "Recuperar una sola tabla" revierte menos cosas.
  • Recuperar una sola tabla (RECOVER TABLE, 12c+ Enterprise Edition) — Una sola tabla se borró o se dañó por error; el resto de la base de datos debe quedar como está (12c+ Enterprise Edition). Si se hizo DROP sin PURGE, mire primero la recyclebin: FLASHBACK TABLE … TO BEFORE DROP tarda segundos (lo muestra el paso de diagnóstico).
  • Recuperar una PDB eliminada (DROP PLUGGABLE DATABASE) — Una PDB se eliminó con DROP PLUGGABLE DATABASE. Si los archivos siguen ahí, se vuelve a conectar con el XML; si se borraron, se recupera desde el backup (en 21c+ con un solo comando, en 19c mediante una CDB temporal). La CDB sigue abierta.
  • Restore a otro servidor (nuevo host, desde el autobackup del controlfile) — El servidor se ha perdido por completo o hay que montar un entorno de copia/pruebas: el backup se restaura en otro servidor (solo instancia única, sistema de archivos). Se recupera hasta el último archive log respaldado y lo posterior se pierde; la copia se abre con RESETLOGS.
  • Data Guard: obtener el archivo del standby/primary por la red (FROM SERVICE) — Hay Data Guard: el datafile perdido del primary se obtiene del standby, y el standby rezagado o el standby controlfile perdido del primary, sin usar piezas de backup (12c+).

Antes de empezar

  • El incidente está registrado y el equipo de aplicación informado: cuándo, qué ocurrió y qué mensaje de error. Si antes de empezar la recuperación se podía hacer una copia del estado actual, se ha hecho (snapshot del servidor/disco o al menos una copia de los datafiles restantes, el controlfile y los online redo logs); un paso equivocado puede empeorar la situación.
  • Los backups son accesibles: …… y, para los archive logs, la FRA …… están montados y legibles. Si los backups están en cinta/MML, el canal SBT y el agente de software funcionan.
  • Se conoce el DBID (…). Si no: la línea connected to target database: … (DBID=…) de los logs antiguos de RMAN… o el nombre del archivo de autobackup (…_cf_c-<DBID>-<YYYYMMDD>-<nn>)….
  • El directorio auxiliary … existe y tiene tanto espacio libre como SYSTEM + SYSAUX + UNDO + el tablespace de la tabla; el servidor tiene ~2 GB de RAM libre para la instancia temporal.
  • …RECOVER TABLE ("Recovering tables and table partitions from RMAN backups") es una funcionalidad de Enterprise Edition.…En Standard Edition 2 no existe RECOVER TABLE: en lugar de los pasos siguientes, restaure el backup en otro servidor ("Restore a otro servidor" + PITR) y extraiga la tabla con Data Pump.…
  • En el servidor de destino está instalada solo como software la misma versión de Oracle con el mismo nivel de RU (opatch lspatches igual en ambos lados), el usuario/grupos oracle y la estructura de directorios coinciden con el origen y hay disco suficiente. En el destino no hay ninguna base de datos en marcha con el mismo nombre.
  • La ventana de mantenimiento/interrupción está aprobada… (en este escenario la base de datos sigue abierta; solo se ven afectados los objetos implicados)…. El programador de backups (cron/systemd/scheduler) está detenido hasta que termine la recuperación; de lo contrario, podría ejecutarse un backup o un DELETE OBSOLETE a mitad de la operación.
  • Se conoce el registro en Clusterware: ubicación del spfile y del archivo de contraseñas, …instancias y nodos…estado de la base de datos… (srvctl config database -db …). Guarde esta salida antes de la recuperación.
  • …Block media recovery…Tablespace point-in-time recovery…Flashback Database… es una funcionalidad de Enterprise Edition; en Standard Edition 2 el comando no funciona. La ruta SE2 de este escenario se muestra aparte en los pasos.
  • Para la instancia temporal (auxiliary) hay en el directorio …………… tanto espacio libre como SYSTEM + SYSAUX + UNDO… + …… + PDB…, y en el servidor al menos tanta memoria libre como el sga_target del destino (por defecto RMAN da a la instancia temporal la misma SGA).
  • Data Guard listo: el archivo de contraseñas es el mismo en ambos lados (misma contraseña de SYS o SYSBACKUP), el tnsnames.ora de este servidor tiene las entradas … y …, y COMPATIBLE ≥ 12.0. FROM SERVICE no funciona con autenticación del sistema operativo (rman target /); RMAN se conecta con contraseña.
  • Para Flashback Database hay una FRA definida y, o bien el flashback logging está activado (FLASHBACK_ON = YES), o bien el momento objetivo es un guaranteed restore point. Ningún datafile está perdido/corrupto (flashback no recupera un archivo perdido) y después del momento objetivo no se ha reducido (shrink) ningún datafile ni se ha recreado el controlfile.

Fases de la guía

  • Diagnóstico — Diagnosticar la situación · Diagnosticar la situación · Comprobar la recyclebin (si fue un DROP, quizá no haga falta backup) · Determinar el momento objetivo
  • ¿Existe el backup necesario? — Arrancar la instancia en modo MOUNT · Arrancar la instancia en modo MOUNT (srvctl) · Listar los backups · Buscar los archivos de autobackup · Previsualizar la recuperación (PREVIEW) · Leer y validar las piezas de backup (VALIDATE) …
  • Recuperación de datafile / tablespace (online) — Poner … offline · Restaurar y recuperar … · Poner … online
  • Restore completo (mismo servidor) — Restaurar, recuperar y abrir la base de datos · …Volver al modo cluster y arrancar la base de datos con Clusterware…Reiniciar la base de datos con Clusterware (Oracle Restart)…
  • Volver a un momento / SCN (PITR) — Hacer backup del estado actual antes de volver atrás · Poner la base de datos en MOUNT en una sola instancia (srvctl) · Llevar …la PDB…la base de datos… al momento objetivo · …Volver al modo cluster y arrancar la base de datos con Clusterware…Reiniciar la base de datos con Clusterware (Oracle Restart)…
  • Recuperar una sola tabla (RECOVER TABLE) — Preparar el directorio auxiliary · Recuperar la tabla desde el momento objetivo · Comparar los datos recuperados
  • Recuperación del controlfile — Comprobar si queda alguna copia del controlfile · Comprobar si queda alguna copia del controlfile (ASM) · Arrancar la instancia en NOMOUNT (srvctl) · Restaurar el controlfile desde el autobackup y abrir · …Volver al modo cluster y arrancar la base de datos con Clusterware…Reiniciar la base de datos con Clusterware (Oracle Restart)…
  • Recuperación del spfile — Volver a escribir el spfile a partir de los parámetros en memoria · Escribir en ASM el spfile a partir de los parámetros en memoria · Restaurar el spfile desde el autobackup · Restaurar el spfile desde el autobackup en ASM · Verificar que la instancia arrancó con el spfile
  • Servidor de origen: recopilar información y transferir los backups — Tomar un backup actualizado · Escribir el DBID, el autobackup y la lista de directorios · Copiar los backups y el archivo de contraseñas al destino
  • Servidor de destino: restore y recovery — Crear los directorios · Añadir la entrada en oratab · Restaurar el spfile y el controlfile y hacer MOUNT · Registrar las piezas de backup (CATALOG) · Restaurar, recuperar hasta el último archive log y abrir · Separar la copia del origen (opcional)
  • Diagnóstico: ¿por qué RMAN no encuentra el backup? — Ver la nueva ubicación de las piezas de backup · Listar los backups que RMAN conoce y los que faltan
  • Red de seguridad — Copiar el estado actual del controlfile
  • Registrar los backups en RMAN — Registrar las piezas del nuevo directorio (CATALOG START WITH) · Limpiar los registros de la ubicación antigua
  • Verificación: ¿se encuentran ya los backups? — Volver a previsualizar la recuperación · Ajustar el script de backup a la nueva ubicación
  • Diagnóstico: ¿qué archive logs hacen falta y están en el backup? — Comprobar si los archive logs están en disco · Buscar el backup de los archive logs y previsualizar
  • Red de seguridad: directorio de destino y espacio — Preparar el directorio de restore
  • Restaurar los archive logs — Restaurar los archive logs (RESTORE ARCHIVELOG)
  • Verificación y limpieza — Listar los archive logs restaurados · Borrar los archive logs restaurados al terminar
  • Diagnóstico: ¿es un bloque corrupto? — Explorar el archivo (VALIDATE) · Listar los bloques corruptos y el objeto al que pertenecen
  • Red de seguridad: ¿hay una copia sana y una cadena de archive logs? — Previsualizar los backups del archivo y la cadena de recuperación
  • Reparar los bloques corruptos — Reparar los bloques corruptos desde el backup (RECOVER CORRUPTION LIST) · Standard Edition 2: restaurar el datafile · Corregir los bloques NOLOGGING (si los hay)
  • Verificación: ¿están sanos los bloques? — Volver a explorar el archivo · Buscar la causa raíz: errores de disco y almacenamiento
  • Diagnóstico: ¿el archivo es SYSTEM o UNDO? — Arrancar la instancia en modo MOUNT · Arrancar la instancia en modo MOUNT (srvctl) · Verificar que el archivo es SYSTEM o UNDO · Previsualizar y validar el backup necesario
  • Red de seguridad — Copiar el estado actual del controlfile
  • Restaurar el datafile de SYSTEM / UNDO — Cerrar la PDB · Restaurar, recuperar y abrir el datafile · …Volver al modo cluster y arrancar la base de datos con Clusterware…Reiniciar la base de datos con Clusterware (Oracle Restart)…
  • Diagnóstico: ¿el archivo perdido es un tempfile? — Ver los tempfiles y su estado · Comprobar el archivo y el alert log
  • Red de seguridad: comprobación de espacio — Comprobar si hay espacio para el nuevo tempfile
  • Añadir un nuevo tempfile y quitar el perdido — Añadir un nuevo tempfile y quitar el perdido
  • Verificación — Verificar el tablespace temporal
  • Diagnóstico: ¿qué grupo y en qué estado? — Ver el estado de los grupos de redo log
Abrir el plan paso a paso para su entorno →