viernes, 28 de diciembre de 2012

La tecnología FLASHBACK DATABASE para acelerar los procesos de Testing y Homologación de Aplicaciones, Modulos o Procesos


La tecnología flashback fue introducida en 9i y siguió evolucionando para proporcionar nuevas caracteristicas y funcionalidades en las subsiguientes versiones. 
En esta nota voy a mostrar una de las caracteristicas mas interesantes, disponible a partir de 10g, que es el flashback de la base de datos completa que utiliza el mecanismo de recover de bloque y va guardando el bloque anterior de cada cambio en un archivo del so. El flashback es simplemente ir restaurando los bloques anteriores ajustando con los archives hasta llegar al instante definido en el comando de flashback.
Esta operación resulta muy util para realizar testing ya que se puede "rebobinar" los cambios a una cierta fecha y hora en el pasado, a un scn o a un checkpoint previamente definido. 
Cuando se necesita repetir un determinado proceso de prueba o si hubo un cancelación por un error, se aplica el flashback para retroceder al instante anterior a la prueba que se quiere repetir o en el caso de que se hubiera producido una cancelación se corrige el problema y se relanza nuevamente. 

A continuación un listado de los features Flashback a través de las versiones de Oracle:

FLASHBACK QUERY (9i)
FLASHBACK VERSIONS QUERY  (9i)
FLASHBACK TABLE  (10g)
FLASHBACK DROP   (10g)
FLASHBACK QUERY  (10g)
FLASHBACK DATABASE  (10g)
FLASHBACK TRANSACTION QUERY (10g)
FLASHBACK TRANSACTION (11g)
FLASHBACK DATA ARCHIVE (Oracle Total Recall) (11g)

Parametros Relacionados con FRA

Para una base de datos llamada ROP los parametros a definir son los siguientes:

ALTER SYSTEM SET db_recovery_file_dest_size=50g scope=both;

ALTER SYSTEM SET db_recovery_file_dest='/flashbackROP' scope=both;

ALTER SYSTEM SET DB_FLASHBACK_RETENTION_TARGET=10080 scope=both;  -- 1 semana,  en minutos


Como activar FLASHBACK DATABASE

SHUTDOWN IMMEDIATE;

STARTUP MOUNT EXCLUSIVE;

ALTER DATABASE ARCHIVELOG  -- Es requisito para activar flashback que la base este en modo archivelog

ALTER DATABASE FLASHBACK ON;

ALTER DATABASE OPEN;


Como desactivar FLASHBACK DATABASE

SHUTDOWN IMMEDIATE;

STARTUP MOUNT EXCLUSIVE;

ALTER DATABASE NOARCHIVELOG

ALTER DATABASE FLASHBACK OFF;

ALTER DATABASE OPEN;


Para Monitorear FRA 


-- Para ver status de flashback logs
select * from v$flashback_database_log

-- Para ver detalle de archivos f logs generados
select * from v$flashback_database_logfile order by first_time desc

-- Para ver los archive logs
select * from v$archived_log order by completion_time desc

-- Para ver como esta alocada la FRA por tipo de archivo
Select file_type, percent_space_used as used,percent_space_reclaimable as reclaimable,
    number_of_files as "number" from v$flash_recovery_area_usage;

-- Para ver consumo de flashback logs por dia
select to_char(first_time,'YYYYMMDD'),round(sum(bytes)/1024/1024/1024,2) Size_Gb,count(1)
from v$flashback_database_logfile
group by to_char(first_time,'YYYYMMDD')
order by 1

-- Para ver consumo de archives por dia
select to_char(completion_time,'YYYYMMDD'),sum(block_size*blocks)/1024/1024/1024 Size_Gb,count(1)
from v$archived_log
group by to_char(completion_time,'YYYYMMDD')
order by 1

-- Para ver FRA a nivel global

select name,
       round(space_limit/1024/1024/1024,2) as Total_size ,
       round(space_used/1024/1024/1024,2) as Used,
       round(SPACE_RECLAIMABLE/1024/1024/1024,2) as reclaimable ,
       NUMBER_OF_FILES as "number"
    from  V$RECOVERY_FILE_DEST;

-- Para ver estado de flashback
select * from v$flashback_database_stat

Para hacer FLASHBACK DATABASE a una fecha y hora dada

SQLPLUS> shutdown immediate;

SQLPLUS> startup mount;

SQLPLUS> flashback database to timestamp TO_TIMESTAMP('2012-12-08 08:00:00','YYYY-MM-DD HH24:MI:SS');

SQLPLUS> alter database open resetlogs;

Si no se esta seguro de la fecha a retroceder, se puede levantar la base en modo readonly y volver a hacer flasback. Tambien se puede volver al momento actual usando RECOVER.
Es importante mencionar, que como punto debil de esta tecnologia, en procesos que generen importantes cambios en los datos, la generación de flashback logs sumado a los archives es intensa y si no esta bien dimensionado el area de flashback se puede llegar al limite de FRA o incluso llenarse el disco, ocasionado que la base quede "freezada" hasta que no se libere el espacio con RMAN o se aumente el espacio de FRA.

Para levantar la base en modo lectura:
SQLPLUS> alter database open read only;

Para hacer recover al presente:
SQLPLUS> recover database;