Corrupción en Oracle



Las causas que pueden generar corrupción en una BBDD Oracle son:

Problemas en el sistema de I/O de la máquina.
Problemas del sistema Operativo.
Problemas Internos de Oracle.
Recuperaciones incorrectas de una BBDD.

Para solucionar un problema de éste tipo, normalmente los usuario y/o el cliente quieren recuperar los datos lo mas rápido posible, y la causa de la corrupción queda en segundo plano... Lo cual es un error, porque la corrupción podría volver a repetirse después de haber restaurado...

1. Determinar el alcanze del problema.
Lo primero que debemos hacer, aparte de echar un vistazo al alert.log es verificar todos los ficheros de la BBDD con un dbverify, para ello primero sacaremos cual es el tamaño del bloque de la BBDD y luego pasar una orden en el sistema oparativo como esta:

dbv file='datafile' blocksize=(tamaño del bloque)

el tamaño del bloque lo sacaremos de

SQL> show parameter db_block_size


NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

db_block_size                        integer     8192

de todas formas con el siguinte script podemos sacar todos las comprobaciones para todos los ficheros de la BBDD:

select 'dbv file='''||FILE_NAME||''' blocksize='||Tb.BLOCK_SIZE from dba_data_files Df, dba_tablespaces Tb where Df.TABLESPACE_NAME=Tb.TABLESPACE_NAME;
el resultado de esta select lo podemos meter dentro de un fichero y ejecutarlo con un nohup.

2. Eliminar el problema de Harware.

Puesto que la inmensa mayoría de los problemas de éste tipo se producen por fallos en el hardware lo mejor será solucionar el problema o reemplazar la pieza que está defectuosa, para ello la mejor solución suele ser parar la base de datos y después reemplazar, aunque esto depende del fabricante del equipo y del tipo de pieza...
En el caso específico de que haya sido un error en los discos, debemos poner todos los datafiles afectados en estado offline o bien lleva a estado mount la BBDD.

ALTER DATABASE DATAFILE '/corruptlocation/myfile.dbf' OFFLINE;
y luego copiar estos datafiles con un 'cp' de unix a otro disco sin fallo...
cp  /corruptlocation/myfile.dbf  /newlocation/myfile.dbf
ALTER DATABASE RENAME FILE '/corruptlocation/myfile.dbf'  TO '/newlocation/myfile.dbf
y posteriormente poner el datafile en ONLINE o bien levantar la BBDD (depende de lo que hayamos echo en el primer punto)
3. Inventario de los objetos de BBDD afectados por la corrupción.

4. Escoger estrategia para restauración y ejecutarla.

Comentarios

Entradas populares de este blog

Ampliar tablespace Oracle

Oracle máximo de sesiones

Bloqueos en Oracle