Como actualizar una BD Standby tras haber tenido gaps

miércoles 27 de julio de 2011
Hace poco tuvimos un caso en el cual se actualizó una BD de Oracle en Dataguard de la versión 9.2.0.8 a la 10.2.0.4, en el proceso de actualización hubo algún problema o error de configuración que provocó que la base de datos de Standby recibiera los archivers pero no los aplicara.

Después de un mes nos dimos cuenta pero era demasiado tarde, los ficheros de archivers necesarios estaban ya borrados y la BD primaria decía que tenía un gap con la BD standby. En este artículo voy a intentar explicar los pasos que hay que hacer para solucionar un gap cuando no tienes los ficheros archivers necesarios para evitarlo.

Los pasos a seguir son los siguientes:

1.- Paramos el listener de la BD de standby para no recibir ni aplicar mas archivers

     lsnrctl stop listener_;


2.- Deshabilitamos en la BD primaria el envío de archivers

      alter system set log_archive_dest_state_1=defer; 
   En vuestro caso habrá que poner el destino de archiver que tengais como remoto a defer, en el mio es el 1.


3.- Cancelamos el recover managed de la BD standby:


     ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;


4.- Determinamos el último valor del SCN de la BD standby, así podremos saber a partir de que SCN debemos hacer backup incremental en la primaria:

     SELECT CURRENT_SCN FROM V$DATABASE; -> 254320

     Este valor será el que tomemos para hacer la copia incremental de la primaria

5.- Nos conectamos con RMAN a la BD primaria y ejecutamos el siguiente comando:

      BACKUP INCREMENTAL FROM SCN 254320 DATABASE FORMAT '/tmp/Standby_%U' tag 'FOR STANDBY';


      Con este comando conseguimos hacer un backup incremental de la BD primaria a partir del SCN especificado, de esta manera podremos adelantar la BD standby al mismo punto que esté la primaria

6.- Enviamos los ficheros generados por el backup a la ruta que queramos de la máquina de la BD standby


      scp /tmp/Standby* usuarios@maquina_standby:/tmp


7.- Nos conectamos con RMAN a la BD standby y hacemos los siguiente:

      CATALOG START WITH '/tmp/Standby_';


      Nos preguntará RMAN si queremos catalogar los ficheros nuevos que no conoce, le decimos "Y" y automáticamente los meterá en su catálogo


8.- Recuperamos la BD standby mediante RMAN:

      RECOVER DATABASE NOREDO;


      Este comando puede tardar mas o menos en función del tamaño de la BD que vayamos a restaurar, en nuestras pruebas tardó unos 10 minutos un fichero de 18GB del backup


9.- Ahora tendremos que crear un controlfile para la BD standby, esto se realiza desde la BD primaria:

     ALTER DATABASE CREATE STANDBY CONTROLFILE AS '/tmp/control_stb.ctl';

10.- Paramos la BD standby

     shutdown immediate

11.- Copiamos este fichero a la BD standby y reemplazamos con este fichero el resto de ficheros de controlfile que tengamos en esta BD

12.- Arrancamos la BD standby, la montamos como standby y activamos el recover:

       startup nomount;
       alter database mount standby database;
       alter database recover managed standby database disconnect from session;

13.- Arrancamos los listeners de la BD standby

14.- Habilitamos el envío de archivers de la BD primaria:


       alter system set log_archive_dest_state_1=enable;


   Ahora tendremos que comprobar en el fichero alert.log si la BD primaria ha comenzado a enviar los archivers y a aplicarlos con normalidad sin dar ningún error de que necesita un fichero para solucionar un gap.


Hemos visto como un problema que aparentemente nos puede causar un poco de pánico (tampoco mucho mientras la primaria funcione correctamente) se puede arreglar de una manera fácil y eficaz mediante un backup incremental de la BD primaria.


Un saludo

0 comentarios:

Publicar un comentario en la entrada