Recuperación de Datos de Base de Datos Oracle Corrupta
La corrupción de una base de datos Oracle puede paralizar completamente las operaciones de una empresa. Existen procedimientos técnicos específicos para cada tipo de fallo: corrupción de bloques de datos, pérdida de redo logs, fallos en ASM o caída de nodos RAC. La recuperación exitosa depende de identificar el tipo exacto de corrupción y aplicar el método adecuado antes de que el daño se extienda.
Arquitectura Interna de Oracle: Bloques, Segmentos y Extensiones
Para entender la corrupción en Oracle, es esencial conocer cómo organiza los datos internamente. Oracle almacena información en bloques de datos (data blocks), que son la unidad mínima de lectura y escritura. El tamaño estándar es de 8 KB, aunque puede configurarse entre 2 KB y 32 KB al crear la base de datos con el parámetro DB_BLOCK_SIZE.
Los bloques se agrupan en extensiones (extents), conjuntos contiguos de bloques asignados a un objeto específico. Varias extensiones forman un segmento (segment): una tabla, un índice, un segmento de rollback o un segmento temporal. Todos estos elementos residen dentro de los tablespaces, que mapean directamente a ficheros físicos en disco: los datafiles (archivos .dbf).
La cabecera de cada bloque Oracle contiene metadatos críticos: número de bloque, número de fichero de datos, SCN (System Change Number) del último cambio, checksum de verificación de integridad y punteros a filas y transacciones activas. Cuando alguno de estos metadatos no coincide con lo esperado, Oracle detecta corrupción e impide el acceso al objeto afectado, reportando el error en el alert log.
Tipos de Corrupción: Física vs. Lógica
Oracle diferencia entre dos categorías fundamentales de corrupción, cada una con causas y tratamientos distintos:
Corrupción Física (Media Corruption)
Se produce cuando el contenido del bloque no puede interpretarse en absoluto. Las causas más frecuentes son:
- Fallo de hardware: sectores defectuosos en disco duro, errores en controladora RAID, fallos de memoria en caché de escritura sin protección ECC
- Escritura incompleta (partial write): corte de alimentación durante una escritura de 8 KB cuando el disco trabaja con sectores físicos de 512 bytes o 4K
- Corrupción en tránsito: errores en cables SATA/SAS deteriorados o switches FC (Fibre Channel) defectuosos en entornos SAN
- Bugs de firmware: ciertos modelos de discos empresariales han presentado bugs que producen escrituras silenciosamente incorrectas sin reportar error al sistema operativo
Oracle detecta la corrupción física comparando el checksum almacenado en la cabecera del bloque con el calculado al leerlo. Si no coinciden, el error reportado es ORA-01578 (ORACLE data block corrupted) acompañado de ORA-01110 (data file reference). Estos errores quedan registrados en el alert log de Oracle y en la vista dinámica V$DATABASE_BLOCK_CORRUPTION.
Corrupción Lógica (Soft Corruption)
El bloque se lee correctamente a nivel físico — el checksum pasa — pero su contenido interno es inconsistente: filas huérfanas, índices que apuntan a bloques inexistentes, metadatos de fila corruptos o punteros de lista de filas incorrectos. Esta corrupción es más difícil de detectar porque Oracle no la descubre al leer el bloque, sino cuando intenta procesar su contenido. Suele deberse a bugs en versiones antiguas de Oracle, condiciones de carrera no resueltas o manipulaciones directas de datafiles con herramientas externas.
DBV (DBVERIFY): La Primera Herramienta de Diagnóstico
Antes de intentar cualquier recuperación, es fundamental cuantificar el daño con precisión. La utilidad DBVERIFY (DBV) analiza un datafile bloque a bloque sin necesidad de que la instancia Oracle esté activa, lo que la convierte en la herramienta de diagnóstico de referencia cuando la base de datos no puede iniciarse:
dbv FILE=/u01/app/oracle/oradata/PROD/users01.dbf BLOCKSIZE=8192 LOGFILE=/tmp/dbv_users01.log
El informe resultante muestra: bloques totales analizados, bloques marcados como corruptos por el checksum (Total Pages Failing (Data)) y bloques con contenido de solo ceros, que son bloques formateados pero vacíos y completamente normales. Cualquier valor mayor que cero en la columna de fallos indica corrupción real que requiere acción.
Para bases de datos activas en modo ARCHIVELOG, se puede usar RMAN VALIDATE sin detener el servicio:
RMAN> VALIDATE DATABASE;
RMAN> VALIDATE DATAFILE 4;
RMAN> SELECT * FROM V$DATABASE_BLOCK_CORRUPTION;
La vista V$DATABASE_BLOCK_CORRUPTION persiste entre reinicios de la instancia y es el registro oficial que RMAN utiliza para sus operaciones de recuperación automática de bloques.
Data Recovery Advisor (DRA): Diagnóstico Automatizado desde Oracle 11g
El Data Recovery Advisor (DRA), disponible desde Oracle 11g, proporciona diagnóstico y reparación automatizada de los tipos de fallos más comunes. El DRA consulta el repositorio de diagnóstico automático (ADR) y las vistas dinámicas de rendimiento, identifica los fallos activos, calcula el conjunto mínimo de acciones reparadoras y puede ejecutarlas directamente:
RMAN> LIST FAILURE;
RMAN> ADVISE FAILURE;
RMAN> REPAIR FAILURE PREVIEW;
RMAN> REPAIR FAILURE;
El DRA puede manejar automáticamente: ficheros de datos faltantes o inaccesibles, corrupción de bloques individuales cuando existe backup válido, ficheros de control corruptos y determinados fallos de redo log. Sus límites son claros: no repara corrupción lógica, no funciona si el backup también está dañado y no tiene solución para daño físico extenso en el medio de almacenamiento.
RMAN: Block Media Recovery y Restauración Completa
Oracle RMAN (Recovery Manager) es la herramienta estándar para recuperación desde backups. Permite operaciones desde la restauración de bloques individuales hasta la recuperación completa Point-in-Time de toda la base de datos.
Block Media Recovery (BMR)
La recuperación a nivel de bloque es la operación menos invasiva: restaura únicamente los bloques listados en V$DATABASE_BLOCK_CORRUPTION desde el backup más reciente y aplica redo logs para actualizarlos al SCN actual. La base de datos permanece completamente online sin interrumpir el servicio:
RMAN> RECOVER CORRUPTION LIST;
-- O especificando bloques concretos:
RMAN> RECOVER DATAFILE 4 BLOCK 1234, 1235, 5678;
Restauración Completa de Datafile
Si el datafile completo está irrecuperable — daño físico extenso o disco muerto — se restaura desde backup:
RMAN> SQL 'ALTER DATABASE DATAFILE 4 OFFLINE';
RMAN> RESTORE DATAFILE 4;
RMAN> RECOVER DATAFILE 4;
RMAN> SQL 'ALTER DATABASE DATAFILE 4 ONLINE';
Si el tablespace afectado no es SYSTEM ni UNDO, puede mantenerse offline mientras el resto de la base de datos sigue funcionando. Los tablespaces SYSTEM y UNDO requieren recuperación con la instancia cerrada.
Recuperación de Redo Logs Corruptos
Los redo logs son el mecanismo central de durabilidad de Oracle: cada cambio se escribe en redo log antes de confirmarse al usuario (commit). Oracle mantiene grupos de redo log en rotación — mínimo 2, recomendado 3 o más — y cada grupo puede tener múltiples miembros en discos distintos (multiplexación para protección). La corrupción de redo logs puede impedir completamente el arranque de la base de datos.
Escenario 1: el grupo corrupto no es el activo (CURRENT). Si está en estado INACTIVE o ACTIVE pero no es el CURRENT, se puede limpiar y recrear sin pérdida de datos:
ALTER DATABASE CLEAR LOGFILE GROUP 2;
-- Si tiene entradas no archivadas (modo ARCHIVELOG):
ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP 2;
Escenario 2: el grupo CURRENT está corrupto. Es la situación más grave. Puede requerir un resetlogs forzado mediante recuperación incompleta en modo MOUNT. Esto descarta la historia de redo logs, abre la base de datos con una nueva encarnación y exige backup inmediato posterior para establecer un nuevo punto de recuperación válido. Las transacciones en vuelo en el momento del fallo se perderán.
Oracle ASM: Recuperación ante Fallos de Disk Group
Oracle Automatic Storage Management (ASM) es el sistema de ficheros y gestor de volúmenes integrado de Oracle. Cuando un disk group no puede montarse, los datafiles que contiene quedan inaccesibles, generando errores ORA-15130 o ORA-15001. Los niveles de redundancia de ASM son: External (sin redundancia interna, depende del hardware), Normal (doble espejo, tolera la pérdida de un failure group) y High (triple espejo, tolera dos failure groups).
Las herramientas de diagnóstico y recuperación de ASM incluyen:
- ASMCMD: interfaz de comandos para inspección y gestión de disk groups y ficheros ASM
- V$ASM_DISK / V$ASM_DISKGROUP: vistas que muestran estado de discos y disk groups en tiempo real
- kfed (ASM Kernel File Editor): editor de bajo nivel para leer y modificar metadatos ASM en los discos, equivalente al DBV para estructuras ASM internas
- amdu (ASM Metadata Dump Utility): extrae datafiles individuales directamente de los discos ASM sin necesidad de montar el disk group; invaluable cuando el disk group no puede montarse
Cuando amdu logra extraer los datafiles a un sistema de ficheros convencional, la recuperación continúa con el proceso estándar de RMAN RESTORE/RECOVER sobre los ficheros extraídos.
Oracle RAC: Recuperación ante Caída de Nodo
En entornos Oracle RAC (Real Application Clusters), múltiples instancias Oracle acceden simultáneamente a la misma base de datos en almacenamiento compartido. La caída de un nodo activa automáticamente el Instance Recovery ejecutado por los nodos supervivientes: aplican los redo logs del nodo caído para garantizar la consistencia transaccional, proceso que generalmente completa en segundos o pocos minutos.
Los fallos de infraestructura más graves en RAC son:
- Corrupción del OCR (Oracle Cluster Registry): contiene la configuración del cluster. Se restaura desde el backup automático del Clusterware con
ocrconfig -restore - Pérdida del Voting Disk: mecanismo de quorum. Si todos los voting disks se pierden, el cluster no puede operar y debe recrearse tras restaurar el almacenamiento
- Split-brain en la red de interconectó: fallo en la red privada RAC puede provocar que los nodos se evicten mutuamente, requiriendo diagnóstico de red antes de reiniciar
Tecnología Flashback: Capacidades y Límites Reales
Oracle Flashback es un conjunto de tecnologías para acceder a estados anteriores de la base de datos sin restaurar desde backup. Flashback Database revierte toda la base de datos a un SCN o timestamp anterior usando flashback logs en la Flash Recovery Area. Flashback Table revierte tablas individuales. Flashback Query consulta datos históricos sin modificar el estado actual.
Para escenarios de corrupción, las limitaciones críticas son:
- No funciona si la corrupción ya estaba presente en el punto histórico al que se quiere revertir
- Requiere que la Flash Recovery Area contenga flashback logs suficientes, que se depuran automáticamente según la política de retención configurada
- No puede recuperar datafiles físicamente inaccesibles o destruidos a nivel de almacenamiento
- Flashback Database requiere que el logging de flashback estuviese activado antes del incidente
Recuperación Forense sin Backup: El Último Recurso
Cuando los mecanismos internos de Oracle no son suficientes — ausencia total de backups, corrupción que afecta tanto a los datafiles como a los propios backups RMAN, o daño físico severo en el almacenamiento — la recuperación requiere técnicas de bajo nivel sobre los ficheros .dbf tratados como contenedores binarios.
Los especialistas en recuperación de datos con experiencia específica en Oracle pueden extraer bloques parcialmente legibles de datafiles con sectores defectuosos, reconstruir tablas a partir de segmentos dañados analizando el formato interno de bloque, recuperar filas individuales de bloques con cabecera corrupta interpretando el row directory, y extraer datos incluso cuando el SYSTEM tablespace — que contiene el diccionario de datos — está parcialmente dañado. Este proceso combina conocimiento profundo del formato interno de Oracle con herramientas de análisis hexadecimal y reconstrucción forense.