martes, 17 de febrero de 2009

Oracle en Español...INCREMENTAL FROM SCN...Refrescando un standby

Entre los más de 400 millones de hispano parlantes, unos miles puede que sean DBA de Oracle, y en ocasiones algunos se sienten muy cómodos leyendo en ingles, pero otros no. Para todos aquellos que no se sienten cómodos leyendo en ingles y prefieren que las explicaciones se den en español, empiezo hoy a escribir en español documentos, pruebas, mejoras de rendimiento, etc.

Como le escribió Jonathan Lewis a un amigo mío en su libro "No porque esté escrito significa que sea cierto", y a lo que yo digo:”no porque lo escriba en este blog implique que sea verdad”, pero seguro que si que lo he probado, y además puede que no te solucione tu problema en el trabajo.

Empecemos con algo sencillo, del capitulo 13 "Using RMAN for Database Transport, Duplication and Migration" del libro "Backup and Recovery Advance User's guide"(B14191-02), en el que describen como realizar una actualización de la base de datos Standby desde un backup incremental.

Primero describamos la situación, tienes un GAP (muchos archivelogs sin estar aplicados) y han sido llevados a cinta y borrados del disco, para este caso pensemos que son un par de gigas que serían varios días sin recuperar, tardaría horas en traer a disco estos archivelogs y después aplicarlos depende de la maquina y tu configuración. Ahora en la 10g tienes BACKUP INCREMENTAL FROM SCN, que te crea un backupset que no se registra en tu repositorio de RMAN y que además es fácil de aplicar en tu standby. Situación:

- Standby con retraso de aplicación de 1 día.
- Tienes 4 días sin aplicar archivelogs.
- Has perdido los backup desde hace 4 diás hasta 2 días antes.
- Tus archivelogs se borran cada 12 horas después de copiarlos a cinta.

Sencillo, y cuando digo sencillo es porque lo es. No son solo los 4 pasos que salen en el manual, aunque tampoco mucho más y realmente estos son bastante importantes. Pero los pasos para hacer el proceso completo realmente son los siguientes:

Recuperas los números de los últimos cambios (SCNs) de los últimos archivelogs aplicados.
Con RMAN creas el backup incremental dependiendo basándote en el número de cambio (SCN) que deduces del punto 1.
Crear un controlfile para la standby con RMAN.
Copiar los ficheros en un directorio en la maquina donde está la standby ó en su defecto que se puedan ver por está maquina.
Catalogar los backupset generados.
Recuperar
Bajar y restaurar desde el nuevo standby controlfile
Y volver a montarla para iniciar la recuperación automática.

Y eso es todo, son 8 pasos, que a diferencia de los 4 que nos indica el manual sin importantes. Ahora bien lo bueno son las consultas y comandos, porque mucho hablar pero con poca idea esto no sale, y al final lo que siempre se quiere son los comandos, y yo he ejecutado los siguientes:

Desde la standby, en el sqlplus:

Select max(first_change#)
From v$log_history;

O también vale

Select max(first_change#)
From v$archived_log
Where applied ='YES';

Con esto sacas el último número de cambio (SCN) yo recomiendo hacer el backup desde el penúltimo aplicado. Después de esto apagas la recuperación automática, si no se ha hecho antes:

alter database recover managed standby database cancel;

Después de esto te conectas a la primaria con RMAN para hacer el backup incremental y crear el fichero de control para la standby.

backup incremental from scn format ' ruta y nombre y%U';

backup current controlfile for standby format 'ruta y nombre';

Dependiendo de tu configuración el va a crear más o menos ficheros, por razones como que tienes un AUTOBACKUP CONTROLFILE, por ejemplo.
Copias los ficheros a un directorio en la maquina de la standby, ya sea scp ó ftp, esto es a gusto del consumidor.
Después en la maquina donde está la standby te conectas a RMAN, y catalogas los nuevos backusets que acabas de traer de la maquina donde está la primaria:

catalog start with 'ruta donde tienes los backupsets'

Después de esto tienes que hacer la recuperación, con un sencillo:

recover database noredo;

Después de esto, que es lo ultimo que sale en el manual, y falta un paso importante, hay que poner a que sea una standby, y lo haces con el fichero de control que acabas de generar con RMAN desde la primaria. Y se debe hacer esto desde RMAN, por lo menos el "restore" del standby controlfile

shutdown
startup nomount

restore standby controlfile from 'ruta y nombre';

shutdown

startup mount

Y por ultimo volver a que se realice la recuperación automática con:

alter database recover managed standby database disconnect from session;

Para algunos que hacen recuperaciones nocturnas, y que levantan su standby por la noche para aplicar sus archivelogs, les vale hasta la bajada de la base de datos después de la recuperación de su standby controlfile, porque el script que realice la carga haría justo lo siguiente iniciar y montar.
Cuando solo haces los 4 del manual, el fichero de control de la standby queda con la última secuencia aplicada, pero las cabeceras de los datafiles con los SCNs de actuliazadas a los backupstes aplicados. Cuando restauras el fichero de control a partir del controlfile standby creado con RMAN en la primaria, quedan sincronizados, y aquí tengo que hacer un mención especial, cuando haces una recuperación hasta una fecha determinada y después restauras el fichero de control hasta una fecha determinada, el debería saber que además de ser un fichero de standby la base de datos, justo en el momento de activar la recuperación automática como no tiene realmente aplicado los arhicvelogs los debe aplicar. Si alguno se encuentra con que esto no pasa, por favor enviarme el error, pero no debería pasar, sino que simplemente empiece a recuperar desde la última secuencia con respecto a la recuperación con NOREDO realizada.

Espero que les sirva, y que si tiene algún problemilla me lo puedan comentar, así aprendemos todos.

Como les digo voy a ir escribiendo cosillas que me encuentro y que hago en el trabajo que están en ingles, y que se que es más fácil para muchos leer en español que en ingles, teniendo en cuenta no solo explicar sino también los comandos, y el porque de las cosas. Pero no es de un nivel extremadamente alto este blog, solo son pequeñas soluciones, detalles ó momentos que buscas y mejor leerlo en español.

Si alguno tiene un problema no dude en consultarme, yo no soy un mega expertos de Oracle, pero si que soy muy curioso :) . Sería bueno que al igual que Tom Kyte poder leer en español preguntas y respuestas que pueda publicar, con todo el respeto que se merece este “evangelista” mega-gurú de Oracle. Tienen mi correo así que estoy a la entera disposición siempre que lo sepa, tengo tiempo a responder.

John Ospino Rivas