Recover ArchiveLog

El recover de una BBDD en modo ArchiveLog implica la aplicación de ArchiveLogs antes de poder abrir la BBDD. Como mínimo, se deben aplicar los ArchiveLogs generados durante el backup de la BBDD.

Además, podemos hacer un recover completo (restaurar todas las transacciones) o bien un recover UNTIL ... (no restaurar hasta el último segundo sino dejar la BBDD en el estado que estaba en un momento anterior en el tiempo).

Vamos a ver la forma general de hacerlo según que el backup de los archivelogs se haya hecho con RMAN o no.

Recover de ArchiveLogs sin RMAN

 Podemos dividir esta tarea en tres fases:

  1. Si los ArchiveLogs están en cinta, llevarlos a disco
    1. Si es posible, recuperarlos en el mismo directorio donde estaban.
  2. Aplicar los ArchiveLogs a la BBDD.
  3. Abrir la BBDD.

Para aplicar los ArchiveLos, se hace desde sqlplus:

sqlplus "/ as sysdba"

shutdown immediate
startup nomount

RECOVER DATABASE UNTIL TIME '1998-11-23:12:47:30' USING BACKUP CONTROLFILE;

La opción USING BACKUP CONTROLFILE se debe especificar solo si se ha recuperado el controlfile desde un backup. Si el controlfile no se ha perdido, no se debe especificar.

La opción UNTIL... en sus muchas variantes (UNTIL TIME, UNTIL SCN, UNTIL CANCEL) se debe especificar solo si no se desea restaurar hasta el final. Si se desea restaurar hasta la última transacción, no se debe especificar.

RECOVER pregunta por el nombre de cada ArchiveLog a restaurar: podemos aceptar el nombre o bien, si hemos restaurado en otro directorio, indicar el nuevo path. Cuando hayamos aplicado unos cuantos ArchiveLogs, podemos contestar 'auto' para que los aplique sin preguntar.

Cuando ya no queden más ArchiveLogs a restaurar, hay que abrir la BBDD.

Para abrir la BBDD se puede hacer con resetlogs o sin resetlogs: si no se ha recuperado hasta el final, hay que abrir con resetlogs.

Lo mejor, es intentarlo por orden:

sqlplus "/ as sysdba"

alter database open;

(Si se queja de que hay que abrir con resetlogs:

alter database open resetlogs;

Recover de ArchiveLogs con RMAN

Para hacer recover de ArchiveLogs conRMAN, basta ejecutar:

rman target / nocatalog

set until ...; # solo si se desea hacer recover hasta un cierto momento de tiempo
run {
allocate channel ch0 type sbt; # solo si se hace recover desde cinta
recover database;
}

Una vez finalizado el recover, hay que abrir la BBDD. Las consideraciones con las mismas que en el caso de recover manual:

Para abrir la BBDD se puede hacer con resetlogs o sin resetlogs: si no se ha recuperado hasta el final, hay que abrir con resetlogs.

Lo mejor, es intentarlo por orden:

sqlplus "/ as sysdba"

alter database open;

(Si se queja de que hay que abrir con resetlogs:

alter database open resetlogs;

Consecuencias de un Open ResetLogs

En una BBDD que está en modo ArchiveLog, el conjunto de backups de los datafiles + los ArchiveLOgs nos permiten recuperar la BBDD según la situación en que estaba en cualquier momento.

No obstante, hay una excepción:

Cuando se abre una BBDD con ResetLogs, se crea una nueva instanciación de la misma y hay una discontinuidad en los backups: al aplicar ArchiveLogs, no se pueden aplicar Archivelogs generados antes y después del open ResetLogs.

Como consecuencia de esto, los nuevos ArchiveLogs generados no se podrán aplicar a la BBDD hasta que hayamos hecho un backup de los datafiles.

Por tanto, después de un open ReseLogs y antes de entrar ven producción, se debe realizar un backup de los datafiles.