Escenario 3
El escenario es el siguiente, al realizar un backup incremental nivel 1 en la base de datos, arrojó el siguiente error:
ORA-19566: exceeded limit of 0 corrupt blocks for file /XXXX/data1/TBS_CORRUPTO_01.dbf
La base está en modo ARCHIVELOG, y la estrategia de backup es incremental.
Se intenta reproducir el error en RMAN
Como RMAN tiene la capacidad de tomar backup de unidades independientes, hasta el nivel de un datafile, se intenta tomar backup solo del file corrupto, seteando previamente, que admita hasta 5 corrupciones:
{
allocate CHANNEL t1 type ‘SBT_TAPE’
parms ‘ENV=(TDPO_OPTFILE=/opt/tivoli/tsm/client/oracle/bin64/tdpo.opt)’;
set maxcorrupt for datafile 696 to 5;
BACKUP INCREMENTAL LEVEL 1 Datafile ‘/XXXX/data1/TBS_CORRUPTO_01.dbf’ ;
release channel t1;
}
Esto no resulta, y genera el mismo error 19566:
ORA-19566: exceeded limit of 0 corrupt blocks for file /XXXX/data1/TBS_CORRUPTO_01.dbf
Se realiza varios intentos, con hasta 10 maxcorrupt, sin resultar, por lo cual, es conveniente determinar el número exacto de bloques corruptos con el comando dbverify: (se ejecuta en el sistema operativo directamente)
DBVERIFY
DBVERIFY – Verification complete
Total Pages Examined : 1048575
Total Pages Processed (Data) : 689334
Total Pages Failing (Data) : 0
Total Pages Processed (Index): 358681
Total Pages Failing (Index): 0
Total Pages Processed (Other): 266
Total Pages Processed (Seg) : 0
Total Pages Failing (Seg) : 0
Total Pages Empty : 294
Total Pages Marked Corrupt : 256
Total Pages Influx : 0
Highest block SCN : 4194321644 (1528.4194321644)
Este comando realiza un scanner completo del archivo, buscando corrupciones.
Encontró 256 bloques corruptos.
Examinando los objetos del archivo, se encontró que la ocupación era inferior al 1% del tamaño total, por lo cual, lo más simple fue mover los objetos a otro tablespace temporalmente, eliminar el tablespace corrupto, recrearlo, y regresar los objetos movidos.
Para mover los objetos temporalmente:
Cabe aclarar que todos los objetos, eran particiones de tablas
Partition_Name || ‘ tablespace tbs_nuevo; ‘
From Dba_Segments
Where Tablespace_Name Like ‘TBS_CORRUPTO’
And Segment_Type Like ‘TABLE P%’
Guardamos la sentencia de creación del tbs_corrupto, para luego poder recrearlo.
Es conveniente, antes de eliminarlo por completo, redimensionar el tamaño de los datafiles que lo componen, al mínimo posible, de lo contrario, el espacio queda tomado por el sistema operativo.
Para guardar la sentencia de creación del tablespace:
select dbms_metadata.get_ddl(‘TABLESPACE’, tablespace_name)
from Dba_Tablespaces
where tablespace_name = ‘TBS_CORRUPTO’;
Para redimensionar los datafiles que componen el tablespace:
FROM v$datafile
WHERE ts# = (SELECT TS# FROM v$TABLESPACE WHERE name = UPPER(‘&tbs_a_borrar’));
Eliminar el tablespace
Recrear el tablespace, y regresarle los objetos, con los mismos comandos.
Tomar un backup del tablespace
Se efectúa un backup FULL solo del tablespace:
{
allocate CHANNEL t1 type ‘SBT_TAPE’
parms ‘ENV=(TDPO_OPTFILE=/opt/tivoli/tsm/client/oracle/bin64/tdpo.opt)’;
BACKUP Tablespace TBS_CORRUPTO;
release channel t1;
}
Y ocurre correctamente sin errores.
Backup de un tablespace con RMAN: Escenario de bloques corruptos por Gisela Velazco se encuentra bajo una Licencia Creative Commons Atribución-NoComercial-SinDerivadas 3.0 Unported.
Gracias por compartir tu concimiento
Muchas gracias Gil! Disfruto que te haya parecido interesante la nota.
Saludos
Gisela
good! thnx
Gracias por comentar Anónimo!
Saludos