logo
MyWebStudies - Página de inicio
INGRESAR

REGISTRARSE
Buscador

Recuperación automática de la instancia

Selecciona el idioma :

Este video solo está disponible para los alumnos que han adquirido el curso

Recuperación automática de la instancia


En esta sesión vamos a aprender cómo Oracle recupera una instancia de forma automática, por ejemplo, cuando falla la electricidad, o cuando se estropea una tarjeta de memoria, o hay algún problema en la CPU, en fin, cuando se produce algún problema que no tenga que ver con la pérdida de algún disco. Para ello, mientras tengamos de manera correcta los redo log, los archivelogs, etc., Oracle no va a tener problemas en recuperar dicha instancia.

¿Qué es lo que hace Oracle en realidad? Oracle primero comprueba que la base de datos no se cerró bien. Esta información la obtiene en el fichero de control, ya que si el fichero de control, o alguna de sus copias, no está bien cerrado, entonces tendrá un check o alguna propiedad que no va a estar correctamente activa. Entonces cuando la base de datos arranca y Oracle detecta a través del fichero de control que la base de datos, por algún motivo no se ha funcionado bien, o no se ha cerrado correctamente.

Después de esto, Oracle va a comprobar que información puede haber en los redo que no haya sido guardada aún en la base de datos, es decir, podríamos tener INSERTS, UPDATES y DELETES que estén en el redo log, y no hayan sido guardados en los ficheros de datos. Estas transacciónes pueden estar validadas o no con un commit, recordemos que en el redo log se van a archivar todas las transacciónes, por lo que puede pasar que algunas de ellas, ya hayan sido archivadas en los ficheros de datos. Oracle por su parte debe asegurarse de finalizar de manera correcta estos datos que se encuentran en el redo log, validando las transacciónes que tenian commit, y deshaciendo las transacciónes a las cuales no se les hizo un commit.

Todo lo anterior Oracle lo hace en dos fases. La primera fase se denomina ROLLING FORWARD. Lo que hace en esta fase es tomar todos los cambios que tengamos en los redolog y los guarda en los ficheros de datos. Esto puede confundirnos un poco, porque podríamos pensar, qué sentido tendria archivar todas las las transacciónes, incluso las que no estén validadas. Lo que sucede es que en este punto, todavía Oracle no sabe qué transacciónes están validadas y cuáles no, entonces toma toda la información del redo log, y la guarda en los ficheros de datos.

Y luego se realiza ROLLING BACK, donde Oracle hace un rollback de todos aquellos bloques que no hayan sido validados. Entonces, básicamente lo que Oracle hace es un ROLLING FORWARD, guardando todo lo que exista en el redolog, y posteriormente hace un ROLLBACK de todos esos bloques no hayan sido validados. De esta forma, cuando la base de datos arranca, se han hecho todos estos cambios, y es por ello que va a funcionar son problema alguno.

Vamos a verlo de forma práctica mediante un ejemplo. Lo que vamos a hacer es crear una tabla, insertar un par de valores, y solo vamos a validar uno de ellos, después vamos a parar la base de datos de forma abrupta, para posteriormente volver a arrancar la base de datos. Nos auxiliaremos también de la información que nos ofrece determinado fichero de la base de datos, para comprobar cómo es que Oracle hace todo esto del ROLLING FORWARD y el ROLLING BACK, y todo el proceso en el log. Veremos cómo en determinado momento, Oracle tiene que hacer un recovery de los redo log online para poder arrancar correctamente la base datos, una vez que por alguna razón no se haya cerrado correctamente esta última.

Comencemos creando una tabla cualquiera:

  • CREATE TABLE edades (edad NUMBER) TABLESPACE CINE

Ya tenemos la tabla creada, ahora vamos a meter un primer valor:

  • INSERT INTO edades VALUES (25)

Y vemos que se nos indica que hemos creado una nueva fila, o sea, hemos insertado un valor en la tabla. Y vamos a validar este dato haciendo un COMMIT.

De esta manera este valor que insertamos ya está guardado, da igual que ahora esté en el redo log, aun así, si la base de datos se cayera este dato tiene que estar guardado, y para ello Oracle tiene la recuperación de instancia, que hace que los datos que hayamos validados no se pierdan después de una caída brusca de la base de datos.

Ahora vamos a meter otro valor en la tabla:

  • INSERT INTO edades VALUES (50)

Presionamos Intro, otra vez se nos informa que hemos creado una fila, pero este dato no lo vamos a validar. Entonces, en teoría, si se fuera la luz, o se parara bruscamente la base de datos por problemas en la red, etc. Este segundo dato desapareceria, porque no lo hemos validado, en cambio, como vimos hace unos segundos, en la tabla si que apareceria el primer dato que insertamos, toda vez que hicimos un commit después de insertarlo.

Antes de parar la base de datos y volverla a arrancar, vamos a irnos a esta terminal de aquí. Si vemos ya antes hemos puesto una dirección en la línea de comando para no tener que escribirla durante el transcurso del video.

Esta dirección está compuesta por el ORACLE_BASE, dentro tenemos un directorio llamado DIAG y dentro tenemos otro llamado RDBMS, que es donde se alojan los logs y la trazas de las bases de datos. En nuestro caso dentro de la base de datos ORCL, otra vez se vuelve a repetir el directorio con el nombre de la base de datos, y por último tenemos el directorio TRACE, que dentro tiene un fichero, que es el fichero de traza, donde se va guardando la información de lo que se va haciendo con la base de datos.

Vamos a verlo, presionamos intro para entrar al directorio trace, y escribimos:

  • ls al

Y podemos ver el fichero alert_orcl.log, que es el fichero de traza para la base de datos en cuestión.

Hagamos ahora un:

  • tail – f alert_orcl.log

Con el -f, lo que buscamos es que se quede en la pantalla este archivo, pero a la vez pendiente de los cambios que sucedan en el mismo. O sea, cada vez que se produzca un cambio en este fichero, podremos visualizarlo sin tener que hacer nada más. Presionamos Intro y ya podemos ver el contenido de este archivo.

Vamos de vuelta a la terminal donde estamos dentro del sqlplus y vamos a simular que la base de datos se cae, para ello hacemos un SHUTDOWN ABORT, este shutdown es bastante brusco, detiene todo en la base de datos, es similar a cuando tenemos un corte de electricidad o un fallo en la red etc.

Presionamos Intro y nos vamos a la otra terminal de Linux y vemos que en fichero de traza se nos informa que hemos hecho un SHUTDOWN y también, el momento en terminó de ejecurase ese shutdown.

Si volvemos al sqlplus e intentamos hacer, por ejemplo, una consulta cualquiera a la base de datos nos dará un error, porque hemos parado la base de datos. Vamos a escribir una consulta cualquiera para comprobar esto:

  • SELECT * FROM edades

Presionamos Intro y tenemos el error que esperábamos.

Si arrancáramos la base de datos nuevamente, pudiéramos observar en el archivo de traza, que en algún punto Oracle nos informa que la base de datos no se ha errado correctamente y que a hacer un recovery de los redo log. Vamos a verlo:

  • Escribimos
  • Startup

Presionamos Intro, vemos que comienza el arranque de la base de datos, y vámonos a la terminal de Linux donde tenemos visualizándose el fichero de traza.

Y podemos observar que se nos muestra una gran cantidad de información, por ejemplo, nos indica que se están atrancando todos los procesos, los dispatchers, los procesos de background, etc…También se nos muestran los bugs que se solucionan. En fin, se muestra acá toda la información del proces


recuparacion automatica instancia

Publicaciones Recientes de oracle dba

¿Hay algún error o mejora?

¿Dónde está el error?

¿Cúal es el error?