Hoy vamos a ver una entada que nos puede traer un poco de cabeza.
Supongamos tenemos la tipica consulta que nos devuelve un error de corrupcion de bloque ORA-01578: ORACLE data block corrupted
SQL> select something from sometable where file_name='whatever'; ERROR at line 1: ORA-01578: ORACLE data block corrupted (file # 377, block # 2818432) ORA-01110: data file 377: '+DATA/TESTDB/DATAFILE/TESTDB.20221119.110001.377.dbf'
Ante este error, nuestros pasos suelen ser claros.
- Buscamos los bloques corruptos con rman validate o en su defecto dbverify dbv
- Comprobamos la vista V$DATABASE_BLOCK_CORRUPTION;
- Recuperamos de backup datafile & block recover datafile 377block 2818432;
Pero , que ocurre si tras ejecutar el validate o el dbv ?
Si miramos el alert.log durane la validacion, veremos lineas con el contenido
TESTDB(3):Completely zero block found during validation
Esto nos indica que es un error en un bloque que contiene solo ceros.
Oracle por diseño no escribe bloques con todo ceros, por lo que este error es heredado del sistema operativo o el sistema de almacenamiento.
Para solucionar este problema deberemos de recuperar ese datafile desde un backup con cualquiera de los metodos soportados
Mas informacion como siempre en Oracle Support
- Physical Corrupted Blocks consisting of all Zeroes indicate a problem with OS, HW or Storage (Doc ID 1545366.1)