Información sobre redos.

Select para obtener cada cuanto se produce un cambio de redos por hora

set line 500
set pages 500

select to_char(first_time,'YYYY-MON-DD') day,
 to_char(sum(decode(to_char(first_time,'HH24'),'00',1,0)),'99') "00",
 to_char(sum(decode(to_char(first_time,'HH24'),'01',1,0)),'99') "01",
 to_char(sum(decode(to_char(first_time,'HH24'),'02',1,0)),'99') "02",
 to_char(sum(decode(to_char(first_time,'HH24'),'03',1,0)),'99') "03",
 to_char(sum(decode(to_char(first_time,'HH24'),'04',1,0)),'99') "04",
 to_char(sum(decode(to_char(first_time,'HH24'),'05',1,0)),'99') "05",
 to_char(sum(decode(to_char(first_time,'HH24'),'06',1,0)),'99') "06",
 to_char(sum(decode(to_char(first_time,'HH24'),'07',1,0)),'99') "07",
 to_char(sum(decode(to_char(first_time,'HH24'),'08',1,0)),'99') "08",
 to_char(sum(decode(to_char(first_time,'HH24'),'09',1,0)),'99') "09",
 to_char(sum(decode(to_char(first_time,'HH24'),'10',1,0)),'99') "10",
 to_char(sum(decode(to_char(first_time,'HH24'),'11',1,0)),'99') "11",
 to_char(sum(decode(to_char(first_time,'HH24'),'12',1,0)),'99') "12",
 to_char(sum(decode(to_char(first_time,'HH24'),'13',1,0)),'99') "13",
 to_char(sum(decode(to_char(first_time,'HH24'),'14',1,0)),'99') "14",
 to_char(sum(decode(to_char(first_time,'HH24'),'15',1,0)),'99') "15",
 to_char(sum(decode(to_char(first_time,'HH24'),'16',1,0)),'99') "16",
 to_char(sum(decode(to_char(first_time,'HH24'),'17',1,0)),'99') "17",
 to_char(sum(decode(to_char(first_time,'HH24'),'18',1,0)),'99') "18",
 to_char(sum(decode(to_char(first_time,'HH24'),'19',1,0)),'99') "19",
 to_char(sum(decode(to_char(first_time,'HH24'),'20',1,0)),'99') "20",
 to_char(sum(decode(to_char(first_time,'HH24'),'21',1,0)),'99') "21",
 to_char(sum(decode(to_char(first_time,'HH24'),'22',1,0)),'99') "22",
 to_char(sum(decode(to_char(first_time,'HH24'),'23',1,0)),'99') "23"
 from v$log_history group by to_char(first_time,'YYYY-MON-DD');

Select para obtener donde están situados los redos:

select group#, status, member 
from sys.v$logfile ORDER BY group#

Select para obtener el tamaño de los redos y el status:

select group#, bytes/1024/1024 tamaño_MB, archived, status, first_change#, first_time 
from v$log order BY first_change#;

Recuperar un archivo redo log

Una base de datos puede permanecer levantada siempre que tenga como mínimo un miembro de uno de los grupos de redo log disponible. El alert recogerá todas las pérdidas de cualquiera de los miembros de un grupo de redo log( ORA-00312, ORA-00313). La vista dinámica V$LOGFILE proporciona el status de cada miembro de los diferentes grupos de redo log. La columna status refleja estos posibles valores:

INVALID          El fichero está corrupto o invalido

STALE             El fichero es nuevo y nunca ha sido usado

DELETE           El fichero ya no se utiliza

<blank>          El fichero esta en uso y no está corrupto

 La pérdida de un logfile de redo puede ser regenerada. Existe el comando  ALTER DATABASE CLEAR LOGFILE GROUP # (donde # es el número del grupo con un miembro dañado), el borrará y recreará los miembros del grupo. Si la base de datos esta en modo ARCHIVELOG, el grupo de logfiles debe ser archivado antes de que Oracle permita la ejecución de este comando. Esto se debe a que este logfile no se archivará y por tanto no estará disponible la información para una recuperación. Existe una variación de este comando que borrar y recrea el logfile a pasar de que este no haya sido archivado, ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP #,  esto implica que después de su ejecución es indispensable hacer un backup de la base datos ya que los backup previos no servirán.

Ya que no se puede hacer una copia de seguridad de los online redo log con RMAN, esta herramienta no se puede utilizar en la recuperación de estos ficheros, utilizaremos por tanto sqlplus o Databse Control.

El comando ALTER DATABASE CLEAR LOGFILE se utiliza para una recuperación en caliente y solo si el logfile está inactivo.

 EJEMPLO

SQL> connect / as sysdba;

SQL> select group#,status,member from v$logfile order by group#;
GROUP#      STATUS          MEMBER
----------  -------------   ------------------------------------
1           INVALID         /u02/ORADATA/prueba/REDO01.LOG
1                           /u02/ORADATA/prueba/REDO01B.LOG
2                           /u02/ORADATA/prueba/REDO02.LOG
2                           /u02/ORADATA/prueba/REDO02B.LOG
3                           /u02/ORADATA/prueba/REDO03.LOG
3                           /u02/ORADATA/prueba/REDO03B.LOG

SQL>ALTER SYSTEM ARCHIVE LOG GROUP 1;
SQL>ALTER DATABASE CLEAR LOGFILE GROUP 1;
SQL> select group#,status,member from v$logfile order by group#;
GROUP#      STATUS          MEMBER
----------  -------------   ------------------------------------
1                           /u02/ORADATA/prueba/REDO01.LOG
1                           /u02/ORADATA/prueba/REDO01B.LOG
2                           /u02/ORADATA/prueba/REDO02.LOG
2                           /u02/ORADATA/prueba/REDO02B.LOG
3                           /u02/ORADATA/prueba/REDO03.LOG
3                           /u02/ORADATA/prueba/REDO03B.LOG