Firebird posee una característica que en ciertas circunstancias puede ser muy útil: crear una Base de Datos “shadow”.

Aunque la palabra “shadow” significa “sombra”, en Informática se la traduce como “espejo”.

Una Base de Datos shadow es una Base de Datos que es idéntica a la original y que es actualizada en el mismo momento en el cual la original es actualizada.

¿Para qué sirve?

Para poder recuperar al instante una Base de Datos que se dañó por un problema físico del disco duro, un problema en la red o porque fue borrada.

¿Cómo funciona?

En un disco duro distinto al disco duro de la Base de Datos original se tiene una versión idéntica a la cual se la conoce como copia “shadow”, todo lo que se inserte, borre o modifique en la Base de Datos original automáticamente también será insertado, borrado o modificado en la Base de Datos shadow.

¿Por qué el disco duro debe ser distinto?

En realidad ambas bases de datos podrían estar en el mismo disco duro pero eso no tendría mucho sentido ya que la principal utilidad de la copia shadow es servir de respaldo cuando ocurre un problema de daño físico en la Base de Datos original. Y en ese caso lo más probable es que todo el disco duro se haya tornado inaccesible, no solamente una parte de él.

Por lo tanto, lo normal es que ambas bases de datos se encuentren en discos duros distintos.

¿Si alguien borró o modificó una fila por error, la copia shadow  servirá de respaldo para recuperar esa fila a su estado anterior?

No, porque la copia shadow es exactamente igual a la Base de Datos original. Cualquier inserción, borrado o modificación en la Base de Datos original se refleja al instante en la copia shadow. La copia shadow solamente es útil cuando ocurre un daño físico en el disco duro original, o la red no funciona o se borró la Base de Datos original. Por lo tanto, si alguien borró por error o por intención una fila en la Base de Datos original, esa fila también estará borrada en la copia shadow.

¿Cuál es el beneficio de tener una copia shadow?

Que si ocurre un desastre en el hardware que dañó, borró o volvió inaccesible a la Base de Datos original, se puede recuperar rápidamente la copia shadow la cual estará exactamente igual a como estaba la Base de Datos original antes de que el desastre ocurriera. El mismo beneficio se tendrá si la Base de Datos fue borrada o fue dañada por un virus o algún otro programa o usuario malicioso.

¿Qué se debe de tener en cuenta cuándo se utiliza una copia shadow?

  1. La copia shadow es una copia exacta de la Base de Datos original. Todo lo que se inserta, borra o modifica en ésta instantáneamente se refleja en aquella
  2. Su utilidad es servir de respaldo en el caso de daño físico del disco duro, de problema grave en la red, o si la Base de Datos original fue borrada o dañada
  3. Cuando se activa una copia shadow, ésta empieza a funcionar en ese mismo instante
  4. Funciona en forma invisible, los programadores nada deben hacer para que funcione
  5. No se requiere acceso exclusivo a la Base de Datos para crearla
  6. Pueden tenerse varias copias shadow a la vez
  7. No es una protección contra corrupción de datos causada por problemas de software
  8. Es un método de todo o nada. Cuando se activa una copia shadow, toda la Base de Datos es activada, no se puede activar solamente algunas tablas o algunos stored procedures, o algunos triggers, etc. Cuando se la activa, se la activa totalmente.
  9. Debe estar en un disco duro fijo, no puede estar en un disco duro removible, ni en un pen-drive, ni en un disco mapeado de la red
  10. No es un sustituto para backups. No creas que por tener shadows puedes dejar de hacer backups periódicamente.
  11. Como cualquier otro archivo de la computadora, puede ser dañado o borrado.
  12. No te puedes conectar a una copia shadow. Nunca trates de conectarte a una copia shadow ni de moverla a otra carpeta, ni de borrarla. Cuando sea necesario conectarse a ella el Firebird sabe muy bien como hacerlo

¿Cuál es la sintaxis para crear una copia shadow?

CREATE SHADOW NúmeroCopia [AUTO | MANUAL] [CONDITIONAL] “NombreArchivo”

Ejemplo:

SHADOW1

(haciendo click en la imagen la verás más grande)

  • Debes estar conectado a la Base de Datos en la cual crearás la copia shadow
  • El modo por defecto es AUTO. Eso significa que cuando la Base de Datos original se torne inaccesible automáticamente  se usará la copia shadow
  • El NúmeroCopia puede ser cualquier número entero, no necesariamente 1
  • El NombreArchivo no debe existir
  • No es obligatorio que el nombre del archivo sea ‘MiShadow1’, puede ser cualquier nombre
  • No es obligatorio que la extensión del archivo sea .shd, puede ser cualquiera o inclusive no tener extensión

¿Cómo se puede saber si la copia shadow existe?

Con el comando SHOW DATABASE;

SHADOW2

(haciendo click en la imagen la verás más grande)

En este caso, como el modo es AUTO la copia shadow se activará automáticamente cuando la Base de Datos original no pueda ser accedida.

¿Cómo se activa una copia shadow cuyo modo es MANUAL?

Mediante el programa GFIX.EXE y la opción -activate, como se puede ver en esta imagen:

SHADOW3

(haciendo click en la imagen la verás más grande)

¿Para qué sirve la cláusula CONDITIONAL?

Cuando el modo es AUTO y la Base de Datos se volvió inaccesible la copia shadow automáticamente toma su lugar y desde ese momento ya no hay una copia shadow (porque la copia que era shadow ahora es la Base de Datos en uso)

Cuando el modo es MANUAL la copia shadow no puede ser usada hasta que sea activada mediante GFIX -activate y desde que es activada ya no existe una copia shadow (porque la que era la copia shadow ahora es la Base de Datos en uso). Generalmente se elige MANUAL cuando se quiere que las conexiones a la Base de Datos se mantengan bloqueadas hasta que manualmente se habilite una nueva copia shadow.

En el caso de AUTO ya no hay una copia shadow. En el caso de MANUAL puede haberla si fue creada manualmente, en otro caso no.

Cuando el modo es AUTO la copia shadow toma rápidamente el lugar de la Base de Datos original y hasta que el administrador cree una nueva copia shadow  la nueva Base de Datos estará funcionando sin un shadow. Esta es una situación que en muchas situaciones podría ser inaceptable, porque si ocurre un nuevo desastre antes de crearse una nueva copia shadow todas las transacciones que ocurrieron se perderán para siempre.

Al usar la palabra clave CONDITIONAL se le dice al Firebird que cuando la copia shadow se convierta en la Base de Datos activa automáticamente cree una nueva copia shadow. De esta manera siempre se tendrá una copia shadow. En general, esta es la opción preferible de usar.

¿Qué más se debe hacer para que la copia shadow reemplace a la Base de Datos original?

Debes renombrarla para que pueda ser utilizada por los programas. Por ejemplo:

La Base de Datos original se llamaba: CONTA.FDB

La copia shadow se llamaba: SHADOWCONTA1.SHD

Después que la copia shadow se convirtió en la Base de Datos activa debes renombrarla como: CONTA.FDB para que todos los programas puedan conectarse a ella

¿Cómo se borra una copia shadow?

Si por alguna razón ya no quieres tener una copia shadow puedes escribir:

DROP SHADOW NúmeroCopia;

y la Base de Datos ya no tendrá la copia shadow NúmeroCopia. Por ejemplo:

DROP SHADOW 1

Harías esto cuando la copia shadow existe, es accesible, pero ya no la quieres usar por alguna razón.

¿Cómo se elimina la referencia a una copia shadow?

Si una copia shadow es borrada del disco duro o es renombrada o por alguna otra razón se vuelve inaccesible, será imposible conectarse a su Base de Datos original, todos los intentos serán rechazados:

SHADOW4

(haciendo click en la imagen la verás más grande)

 En realidad, este problema generalmente ocurre cuando el modo es MANUAL, cuando el modo es AUTO la Base de Datos automáticamente elimina la referencia a la copia shadow y la conexión puede realizarse exitosamente.

El programa GFIX.EXE tiene una opción -kill que sirve para eliminar las referencias a las copias shadows inaccesibles.

SHADOW5

(haciendo click en la imagen la verás más grande)

 A partir de este momento ya se podrá acceder a la Base de Datos, pero ésta se encontrará sin ninguna copia shadow. Si se desea que tenga una copia shadow habrá que crearla como se explicó más arriba.

CONCLUSIÓN:

Una buena característica del Firebird es que nos permite tener copias shadows muy fácilmente y gracias a ello si ocurre un desastre en el hardware no se perderán los datos, podrán ser recuperados al 100%.

Pero lo anterior no significa que deben dejarse de lado los backups periódicos, ya que las copias shadows y los backups sirven para cosas distintas: las copias shadows para tener copias que pueden ser utilizadas muy rápidamente en caso de fallas en el hardware o borrado físico de la Base de Datos; los backups para recuperar los datos que se tenían horas o días atrás y para resguardarse en caso de un incendio, robo de la computadora y situaciones similares.