Firebird 3: usando bases de datos anteriores

6 comentarios

Ok, ya hemos instalado a Firebird 3, ahora queremos empezar a utilizarlo. ¿Cómo lo hacemos?

Lo más probable es que tengamos bases de datos creadas con versiones anteriores de Firebird. Entonces hay que convertir esas bases de datos al formato que usa Firebird 3.

El Firebird utiliza un número interno llamado ODS (On Disk Structure) para saber con cual versión de Firebird fue creada una Base de Datos. Cada versión del Firebird tiene un número único de ODS. Esos números son:

FIREBIRD3_15

Captura 1. Si haces clic en la imagen la verás más grande

Si no coincide la ODS de una Base de Datos con la versión del Servidor del Firebird entonces no podremos conectarnos a esa Base de Datos.

¿Cómo cambiamos la ODS de una Base de Datos?

Mediante un ciclo backup/restore. Hacemos el backup con la versión actual y el restore con la nueva versión.

IMPORTANTE: Esto solamente funciona en una dirección: de una ODS menor a una ODS mayor.

Ejemplo: Usar una Base de Datos creada con Firebird 2.5 en Firebird 3

firebird3_16

Captura 2. Si haces clic en la imagen la verás más grande

Como podemos ver en la Captura 2. la conexión falló porque la ODS de la Base de Datos es 11.2 y la ODS que reconoce el Servidor del Firebird es 12.0

Entonces lo que debemos hacer es convertir la ODS de esa Base de Datos a 12.0, para que pueda ser reconocida. Para ello necesitaremos realizar un ciclo backup/restore.

FIREBIRD3_17

Captura 3. Si haces clic en la imagen la verás más grande

En la Captura 3. hicimos el backup con la versión 2.5 del Firebird ¿cómo sabemos eso? Por dos pistas: a) la carpeta donde se encuentra el programa GBAK.EXE y b) el puerto que usamos para conectarnos a la Base de Datos. En nuestros ejemplos usamos el puerto 3050 para Firebird 2.5 y el puerto 3053 para Firebird 3.

Ahora que ya tenemos el backup realizado el siguiente paso es restaurarlo. Para ello, nos ubicamos en la carpeta donde instalamos al Firebird 3 y escribimos:

FIREBIRD3_18

Captura 4. Si haces clic en la imagen la verás más grande

Cuando la restauración finalice tendremos una nueva Base de Datos, de nombre PRUEBA1-3.FDB y cuya ODS será 12.0 y por lo tanto nos podremos conectar a ella usando Firebird 3.

FIREBIRD3_19

Captura 5. Si haces clic en la imagen la verás más grande

Como podemos ver en la Captura 5. no fue necesario especificar el puerto 3053 ¿por qué no? porque para la conexión usamos el programa ISQL.EXE que se instala junto con el Firebird 3. Sin embargo, en otros casos sí necesitaremos especificar dicho puerto:

FIREBIRD3_20

Captura 6. Si haces clic en la imagen la verás más grande

En el string de conexión que vemos en la Captura 6. indicamos la dirección IP de la computadora donde se encuentra la Base de Datos y también el puerto de esa computadora que usa el Servidor del Firebird 3.

Como siempre, hay que indicar además el path completo a la Base de Datos (ese path es desde el punto de vista del Servidor), el nombre de un usuario, y la contraseña de ese usuario.

Conclusión:

Para que en Firebird 3 podamos usar una Base de Datos creada con una versión anterior del Firebird debemos hacer un ciclo backup/restore. El backup lo hacemos con la versión anterior del Firebird y el restore lo hacemos con Firebird 3.

Para conectarnos a la Base de Datos restaurada a veces será necesario especificar el puerto que utiliza el Firebird 3.

Artículos relacionados:

Instalando Firebird 3 (1)

Instalando Firebird 3 (2)

El índice del blog Firebird21

El foro del blog Firebird21

Copiando completamente o parcialmente una Base de Datos (2)

Deja un comentario

Ya habíamos visto la forma manual de realizar esas tareas en el artículo:

Copiando completamente o parcialmente una Base de Datos (1)

así que ahora es el momento de ver como realizarlas usando un programa de administración gráfica. Todos ellos tienen esas posibilidades, en este artículo usaremos el EMS SQL Manager.

Las opciones que tenemos son:

  1. Copiarla totalmente. Con todos sus metadatos y todos sus datos
  2. Copiar solamente los metadatos. Es decir, su estructura
  3. Copiar todos los metadatos y el contenido de algunas tablas
  4. Copiar algunos metadatos y el contenido de algunas tablas

Opción 1. Copiarla totalmente. Con todos sus metadatos y todos sus datos

BACKUP01

Captura 1. Si haces clic en la imagen la verás más grande

Para realizar un backup debemos elegir la opción Services y luego la opción Backup Database…

BACKUP02

Captura 2. Si haces clic en la imagen la verás más grande

BACKUP03

Captura 3. Si haces clic en la imagen la verás más grande

BACKUP04

Captura 4. Si haces clic en la imagen la verás más grande

Cuando el proceso finalice tendrás tu backup, en la carpeta y con el nombre que le indicaste en la Captura 2.

Opción 2. Copiar solamente los metadatos. Es decir, su estructura

Para conseguir esto, en la Captura 3. marcamos la entrada: Backup metadata only

Opción 3. Copiar todos los metadatos y el contenido de algunas tablas

Para este caso lo mejor es crear un archivo de script con el contenido completo de la Base de Datos y luego eliminar lo que no nos interesa, modificar lo que queremos cambiar, y dejar como está a lo demás.

BACKUP05

Captura 5. Si haces clic en la imagen la verás más grande

Aquí, primero hacemos clic con el botón derecho sobre nuestra Base de Datos, luego elegimos la opción Tasks y luego la opción Extract Database…

BACKUP06

Captura 6. Si haces clic en la imagen la verás más grande

BACKUP07

Captura 7. Si haces clic en la imagen la verás más grande

BACKUP08

Captura 8. Si haces clic en la imagen la verás más grande

La Captura 8. solamente la veremos si en la Captura 6. no habíamos marcado la opción Extract all metadata and data of de database. Si marcamos esa opción después de la Captura 7. pasaremos directamente a la Captura 9.

BACKUP09

Captura 9. Si haces clic en la imagen la verás más grande

BACKUP10

Captura 10. Si haces clic en la imagen la verás más grande

En la Captura 10. puedes elegir cuales objetos te interesa extraer. Puedes extraerlos a todos o solamente a algunos de ellos.

BACKUP11

Captura 11. Si haces clic en la imagen la verás más grande

En la Captura 11. tienes la posibilidad de extraer los datos de solamente algunas tablas (como es el caso de este ejemplo), extraer los datos de todas las tablas, o extraer los datos de las tablas seleccionadas en la Captura 10.

BACKUP12

Captura 12. Si haces clic en la imagen la verás más grande

BACKUP13

Captura 12. Si haces clic en la imagen la verás más grande

Y finalmente, para que empiece el proceso de generar el archivo de script hacemos clic sobre el botón Run

Ese archivo generado es un archivo de texto, puedes realizar cualquier cambio que quieras en él.

Opción 4. Copiar algunos metadatos y el contenido de algunas tablas

Es igual a la Opción 3.

Conclusión:

Como has podido ver también en este artículo, con Firebird tenemos la posibilidad de realizar backups completos o parciales de nuestra Base de Datos.

Enviar el backup a un archivo de script tiene la gran ventaja de que todo es legible y así podríamos revisar ese script y descubrir errores o mejoras que se podrían realizar.

Artículos relacionados:

Entendiendo a los scripts

Usando scripts para documentar la Base de Datos

Ejecutando un script desde Visual FoxPro

Copiando completamente o parcialmente una Base de Datos (1)

El índice del blog Firebird21

El foro del blog Firebird21

Copiando completamente o parcialmente una Base de Datos (1)

1 comentario

A veces puedes querer copiar una Base de Datos completa, con todo su contenido, pero a veces puede interesarte copiar solamente una parte de ella. Por lo tanto, tus opciones serían:

  1. Copiarla totalmente. Con todos sus metadatos y todos sus datos
  2. Copiar solamente los metadatos. Es decir, su estructura
  3. Copiar todos los metadatos y el contenido de algunas tablas
  4. Copiar algunos metadatos y el contenido de algunas tablas

Como el tema es largo, será tratado en 2 artículos. En este veremos como realizar esas tareas manualmente, o sea sin usar un programa de administración gráfica y en el siguiente artículo usaremos un programa de administración gráfica.

Opción 1. Copiarla totalmente. Con todos sus metadatos y todos sus datos

Para este caso lo más recomendable es hacer un backup usando el programa GBAK. ¿Por qué es lo más recomendable? porque al hacer un backup con GBAK se elimina la basura que contenía la Base de Datos original y en el backup no hay basura, ni índices (que serán creados cuando se restaure el backup), y el identificador de todas las transacciones del backup es puesto en cero.


GBAK -b MiBaseDatos.FDB MiBackup.FBK -user SYSDBA -password masterkey

Si el Servidor del Firebird no está funcionando también se puede copiar la Base de Datos con el Explorador de Windows o algún programa similar. ¿Por qué el Servidor del Firebird no debe estar funcionando? Porque si lo está y alguien está conectado, la Base de Datos puede corromperse. Y si nadie está conectado existe el riesgo (pequeño, pero existe) de que el Servidor esté realizando alguna tarea en la Base de Datos (por ejemplo, un sweep). Por lo tanto, copiar con el Explorador del Windows solamente es seguro si el Servidor del Firebird está apagado.

Opción 2. Copiar solamente los metadatos. Es decir, su estructura

El programa GBAK tiene la opción -m la cual copia solamente los metadatos. Su sintaxis es:


GBAK -b -m MiBaseDatos.FDB MiBackup.FBK -user SYSDBA -password masterkey

Opción 3. Copiar todos los metadatos y el contenido de algunas tablas

Para este caso lo mejor es crear un archivo de script con el contenido completo de la Base de Datos y luego eliminar lo que no nos interesa, modificar lo que queremos cambiar, y dejar como está a lo demás.

El programa ISQL tiene una opción -extract que sirve para crear un script de toda la Base de Datos.

COPIAR04

Captura 1. Si haces clic en la imagen la verás más grande

En la Captura 1. vemos que todo el contenido de la Base de Datos DEISY.FDB fue copiado al archivo de script llamado DEISY.SQL

COPIAR05

Captura 2. Si haces clic en la imagen la verás más grande

El archivo de script DEISY.SQL por supuesto que es muchísimo más largo, en la Captura 2. se muestran solamente las primeras líneas.

Ahora, tenemos la posibilidad de eliminar lo que ya no nos interesa tener y de modificar cualquier cosa. Podemos cambiar el nombre o el contenido de los dominios, de las tablas, de los stored procedures, etc. Lo que se nos ocurra.

Después de haber eliminado y modificado todo lo que quisimos, para generar una nueva Base de Datos, debemos quitarle el comentario a la línea CREATE DATABASE, poner el nombre que tendrá la nueva Base de Datos, y el usuario y la contraseña que la creará.

COPIAR06

Captura 3. Si haces clic en la imagen la verás más grande

Para crear la Base de Datos llamada DEISY2.FDB, ingresamos a ISQL y con el comando INPUT ejecutamos el script. Todo lo que esté escrito dentro del script será ejecutado.

COPIAR07

Captura 4. Si haces clic en la imagen la verás más grande

Si todo está bien, la nueva Base de Datos será creada. Si hay algún error, habrá que encontrar cual es el error y corregirlo. Luego, se vuelve a intentar crear la Base de Datos.

Copiando solamente el contenido de algunas tablas

Hasta ahora hemos visto como copiar a una Base de Datos completa, con todos sus metadatos y todos sus datos. Pero ¿y si queremos copiar solamente el contenido de algunas tablas?

Para eso entramos a ISQL, nos conectamos a una Base de Datos, y usando el comando OUTPUT enviamos a un archivo de texto todo lo que hacemos, tal y como vemos a continuación:

COPIAR01

Captura 5. Si haces clic en la imagen la verás más grande

La primera línea le indica al ISQL que todo lo que se escriba a continuación se guarde en un archivo de texto. No se verá en la pantalla, sino que se guardará en el archivo cuyo nombre se escriba después de la palabra OUTPUT.

Ese nombre puede ser cualquiera y puede tener cualquier extensión. Para los datos se acostumbra a ponerle la extensión .DAT pero eso no es obligatorio.

El OUTPUT que se encuentra en la tercera línea se usa para que la salida vuelva a verse en la pantalla, o sea que dejará de enviarse al archivo de texto.

Entre el primer OUTPUT y el segundo OUTPUT puede haber muchas líneas, no solamente una como en este ejemplo.

En el contenido del archivo de texto BANCOS.DAT se verá algo como:

COPIAR02

Captura 6. Si haces clic en la imagen la verás más grande

Donde, como puedes ver, se muestra el nombre de cada columna y el contenido de cada fila.

Opción 4. Copiar algunos metadatos y el contenido de algunas tablas

Es igual a la Opción 3.

Conclusión:

Como has podido ver en este artículo, con Firebird tenemos la posibilidad de realizar backups completos o parciales de nuestra Base de Datos.

Enviar el backup a un archivo de script tiene la gran ventaja de que todo es legible y así podríamos revisar ese script y descubrir errores o mejoras que se podrían realizar.

Artículos relacionados:

Entendiendo a los scripts

Usando scripts para documentar la Base de Datos

Ejecutando un script desde Visual FoxPro

El índice del blog Firebird21

El foro del blog Firebird21

Teniendo los backups en la nube

2 comentarios

La gran importancia de tener backups actualizados supongo que no es necesario recalcar a los profesionales de la Informática. Todos sabemos demasiado bien que si una Base de Datos se daña o se corrompe un backup actualizado salvará la situación.

Y nuestra buena fama profesional.

Ahora la pregunta es: después de tener el backup ¿dónde lo guardamos?

Tradicionalmente se aconsejaba tener siempre dos copias del backup. Una de ellas muy cerca del Servidor y otra muy lejos de él, quizás en otra ciudad.

La copia cercana al Servidor la usábamos si se dañó el disco duro, se corrompió la Base de Datos o algo así. Necesitábamos acceder a esa copia lo más rápidamente posible y por lo tanto debíamos tenerla bien cerca. La copia alejada del Servidor la usaríamos si ocurrió una catástrofe como un incendio, un robo, un atentado terrorista, etc. Entonces, aunque la habitación donde se encontraba el Servidor fue destruida teníamos un backup guardado en lugar seguro (en el domicilio del propietario de la Empresa, por ejemplo).

Esa metodología puede seguir usándose, pero desde hace unos cuantos años tenemos otra alternativa, muy interesante: guardar los backups en la nube. De esta manera obtendríamos las dos ventajas anteriores y de una sola vez: nuestros backups estarían muy cerca (a unos clics de distancia) y en caso de catástrofe no sufrirían daño (porque se encuentran en otras computadoras y posiblemente en otro país). Claro que esto no obvia la necesidad de guardar los backups en dispositivos de almacenamiento a nuestro alcance (CD, DVD, pen-drive, otro disco duro, etc.)

En Internet podemos encontrar muchos sitios gratuitos que permiten el almacenamiento de archivos. Pero el tema no es solamente guardar nuestros archivos en esos sitios sino que también la tarea se realice lo más automáticamente posible, con un mínimo de trabajo de nuestra parte.

En este artículo nos referiremos a dos de esos sitios: DropBox y Mega.

Ambos funcionan de la misma manera:

  1. Abres una cuenta
  2. Descargas e instalas un programa
  3. Determinas cuales son las carpetas que serán sincronizadas
  4. Todos los archivos que guardes en las carpetas elegidas serán subidos a Internet
  5. Si necesitas recuperar uno de esos archivos, ingresas al sitio con tu nombre de usuario y contraseña y descargas el archivo

Como ves, todo es muy simple, muy fácil y muy sencillo.

Backup en la nube usando DropBox

Primero, ingresamos al sitio:

https://www.dropbox.com/es/

NUBE01

Captura 1. Si haces clic en la imagen la verás más grande

NUBE02

Captura 2. Si haces clic en la imagen la verás más grande

Como nos dice el mensaje, después de finalizada la descarga debemos instalar al Dropbox en nuestra computadora.

Una vez que esté instalado deberemos iniciar sesión.

NUBE03

Captura 3. Si haces clic en la imagen la verás más grande

(A veces iniciar sesión se demora algunos minutos, no desesperes, ya se iniciará).

NUBE05

Captura 4. Si haces clic en la imagen la verás más grande

Si ves el cuadro de diálogo de la Captura 4. eso significa que en tu disco C: (que es en donde por defecto sincroniza las carpetas el Dropbox) tienes muy poco espacio. La cuenta gratuita te provee de 2.5 Gb así que en tu disco C: debes tener al menos ese espacio libre.

NUBE06

Captura 5. Si haces clic en la imagen la verás más grande

Si todo está ok, verás la Captura 5.

Para crear la carpeta que por defecto usará el Dropbox debes hacer clic en el botón “Abrir mi carpeta de Dropbox”, si prefieres que la carpeta a sincronizar sea otra entonces debes hacer clic en “Configuración avanzada” y verás la Captura 6.

NUBE07

Captura 6. Si haces clic en la imagen la verás más grande

El paso (1) es elegir la carpeta que queremos sincronizar. El paso (2) es abrir esa carpeta para que sea creada.

A partir de este momento, todos los archivos que guardemos en la carpeta elegida, se subirán a Internet. Tendremos así un resguardo seguro para todos nuestros archivos.

Si más adelante queremos cambiar esa carpeta o alguna de las demás opciones del Dropbox entonces hacemos clic en el icono que se encuentra en la barra de tareas del Windows, luego en la ruedita dentada y luego en “Preferencias…”

NUBE09

Captura 7. Si haces clic en la imagen la verás más grande

NUBE10

Captura 8. Si haces clic en la imagen la verás más grande

Como habrás notado, un icono del Dropbox se encuentra en la barra de tareas del Windows, haciendo clic en ese icono verás un cuadro de diálogo similar al que te muestra la Captura 9.

NUBE11

Captura 9. Si haces clic en la imagen la verás más grande

  • Si haces clic en (1) verás todas las opciones que tienes disponibles
  • Si haces clic en (2) podrás ver la carpeta de Dropbox de tu computadora
  • Si haces clic en (3) ingresarás al sitio https://www.dropbox.com/home

Recuperando los archivos:

Cuando necesites recuperar los archivos que tienes guardados en la nube, tienes dos alternativas:

  1. Hacer clic en (3) de la Captura 9.
  2. Ingresar al sitio: https://www.dropbox.com/ Luego haces clic en “Inicia sesión”, escribes tu e-mail, tu contraseña, y listo.

En ambos casos el Dropbox te mostrará todos los archivos que tienes en la nube, haces clic con el botón derecho sobre el archivo que te interesa descargar y ya está, eso es todo.

NOTA: El Dropbox tiene muchísimas más opciones que si te interesa puedes investigar por tu cuenta. La finalidad de este artículo no es enseñarte a usarlas sino a mostrarte como usando Dropbox puedes tener los backups de tus bases de datos en la nube, de una manera fácil y sencilla y sin ningún trabajo posterior de tu parte (salvo, por supuesto, el de copiar tus archivos de backup en la carpeta sincronizada).

Backup en la nube usando Mega

El sitio https://mega.nz/ ofrece 50 Gb de almacenamiento gratuito (Dropbox solamente 2.5 Gb gratis).

Una vez que ingresamos a ese sitio hacemos clic en el botón “Crear cuenta” que se encuentra en la parte superior de la pantalla, completamos los datos del registro y hacemos clic en el botón “Crear cuenta >” que se encuentra abajo.

Recibirás un e-mail que te pedirá hacer clic en el botón “Activar cuenta”.

Después de hacerlo te llevará a una página web donde deberás confirmar tu cuenta.

Una vez confirmada, deberás elegir el tipo de cuenta que te interesa, gratuita o de pago.

Ahora ya puedes subir archivos a esa carpeta, pero de forma manual. O sea que tú deberás elegir cuales archivos deseas subir. Sin embargo, lo mejor es que esa tarea se realice de manera automática. Para ello debemos descargar e instalar el Cliente de Sincronización de Mega.

NUBE12

Captura 10. Si haces clic en la imagen la verás más grande

Una vez finalizada la descarga y la instalación del Cliente de Sincronización de Mega, veremos un cuadro de diálogo como el que nos muestra la Captura 11.

NUBE13

Captura 11. Si haces clic en la imagen la verás más grande

Como ya habíamos creado una cuenta de Mega entonces hacemos clic en el botón “Siguiente”, en la siguiente pantalla escribimos nuestro e-mail y contraseña, en la siguiente pantalla elegimos “Sincronización selectiva” (porque si nuestro disco duro es de gran capacidad tardará una eternidad en subirlo a la nube)

NUBE14

Captura 12. Si haces clic en la imagen la verás más grande

NUBE15

Captura 13. Si haces clic en la imagen la verás más grande

 En la barra de tareas del Windows verás el icono de Mega. Haciendo clic en él se muestra un cuadro de diálogo similar al de la Captura 13. Eligiendo la opción “Ajustes” se tienen las opciones disponibles. La más interesante es “Sincronizando” porque nos permite agregar todas las carpetas que queremos sincronizar.

NUBE16

Captura 14. Si haces clic en la imagen la verás más grande

 A partir de este momento, todos los archivos que coloquemos en las carpetas locales que se muestran en la Captura 14. se subirán a Internet, automáticamente.

Podemos tener muchas carpetas y muchos archivos en cada una de esas carpetas. Los archivos pueden ser de cualquier tipo. El único requisito es que su tamaño total no debe superar la capacidad de nuestra cuenta (que en el caso de ser gratuita es de 50 Gb.)

Recuperando los archivos

Ok, ya hemos instalado el Cliente de Sincronización de Mega, ya hemos elegido las carpetas que deseamos sincronizar y ahora queremos recuperar alguno de esos archivos. ¿Cómo lo hacemos?

  1. Ingresamos al sitio: https://mega.nz/ (escribiendo esa dirección en el navegador o haciendo clic en el icono de la barra de tareas del Windows)
  2. Hacemos clic en el botón “Iniciar sesión”
  3. Escribimos nuestro e-mail y nuestra contraseña
  4. Veremos los nombres de las carpetas que hemos creado. Haciendo clic sobre ellas veremos los archivos que contienen
  5. Haciendo clic con el botón derecho sobre el nombre de un archivo veremos un menú contextual que nos permitirá descargar a ese archivo.

NUBE17

Captura 15. Si haces clic en la imagen la verás más grande

Como ves, simple, fácil, sencillo, sin complicaciones.

Conclusión:

Tener backups actualizados es de suma importancia porque es la forma más rápida y más segura de recuperar datos si ocurre algún problema.

Desde hace unos años tenemos la opción de guardar esos archivos de backup en la nube. Hay muchos sitios que nos permiten eso, dos de los más conocidos son Dropbox y Mega.

Dropbox ofrece 2.5 Gb gratuitos, pero tiene la ventaja de que los archivos pueden ser accedidos desde cualquier dispositivo que pueda conectarse a Internet, no solamente computadoras. Una de sus desventajas es que solamente permite sincronizar a una carpeta, cualquier carpeta que deseemos, pero una sola carpeta.

Mega ofrece 50 Gb gratuitos y tiene la ventaja de que podemos sincronizar muchas carpetas.

MUY IMPORTANTE: Tanto si usamos Dropbox o Mega o cualquier otro sitio de almacenamiento de archivos lo que debemos recordar es que en las carpetas sincronizadas debemos guardar los backups, jamás, pero jamás, debemos guardar en ellas las bases de datos o las corromperemos. NO LO OLVIDES: Si pones una Base de Datos en una carpeta sincronizada, corromperás la Base de Datos.

Artículos relacionados:

¿Se puede usar Dropbox con bases de datos?

Usando MEGA para guardar archivos en la nube

El índice del blog Firebird21

El foro del blog Firebird21

Haciendo backups con GBAK (1)

2 comentarios

El Firebird nos permite realizar copias de seguridad (generalmente llamadas backups) de nuestras bases de datos de varias formas diferentes, tal como ya habíamos visto en:

https://firebird21.wordpress.com/2013/07/03/los-metodos-para-hacer-backup/

Cada uno de esos métodos tiene sus ventajas y sus desventajas, ninguno es perfecto (evidentemente, porque si uno fuera perfecto ¿para qué tendríamos los demás?).

En el presente artículo empezaremos a ver como hacer backups usando para ello el programa GBAK. Como el tema es muy largo, lo trataremos en varios artículos.

¿Qué es el ciclo backup/restore?

Todos sabemos que debemos realizar frecuentemente copias de seguridad de nuestra Base de Datos porque si ocurre un accidente (como el disco duro dañado), la única forma rápida y confiable de recuperar su contenido en todo o en gran parte es a través de una copia de seguridad actualizada. Este proceso tiene dos partes:

  1. Copiar todo el contenido de la Base de Datos en un archivo. A este paso se le llama realizar el backup.
  2. Usar el archivo de backup para obtener una Base de Datos operativa, a ese paso se le llama restaurar la Base de Datos.

Por lo tanto, el ciclo backup/restore significa: crear un archivo de backup y luego restaurarlo.

Hay que enfatizar que el proceso no está completo si solamente se realiza el backup. Hay que realizar ambos, sí o sí: el backup y el restore. O sea: la copia de seguridad y la restauración de esa copia.

¿Qué programa usaremos para realizar el ciclo backup/restore?

El programa se llama GBAK.EXE, y con él podremos:

  • Realizar el backup
  • Restaurar la Base de Datos

¿Qué tareas realiza GBAK.EXE?

Cuando hace el backup:

  • Lee todo el contenido de una Base de Datos y copia ese contenido en otro archivo. Pero no lo copia completo. Los índices por ejemplo no son copiados. Gracias a eso el tamaño de la copia es menor de lo que sería si los hubiera copiado.
  • No copia la basura en el backup (la Base de Datos original continúa con toda la basura que tenía)

Cuando restaura la Base de Datos:

  • Pone el TID de cada fila de cada tabla en 1. (El TID es un número que identifica a la transacción que creó la fila). Por lo tanto es como si todas las millones y millones de filas de las tablas hubieran sido insertadas por una sola transacción.
  • Verifica que cada fila tenga datos válidos
  • Crea los índices
  • Calcula las estadísticas de los índices

¿Dónde se encuentra el programa GBAK.EXE?

En la sub-carpeta \BIN de la carpeta donde está instalado el Firebird, por ejemplo en:

C:\Archivos de Programa\Firebird\Firebird_2_5\Bin\

¿Es necesario que el programa GBAK.EXE se encuentre ahí para hacer un backup?

No. Puedes tener una copia del programa GBAK.EXE en cualquier carpeta de tu disco duro. Por ejemplo si tienes un programa de contabilidad en la carpeta:

D:\MisSistemas\Contabilidad\

en esa misma carpeta podrías tener una copia de GBAK.EXE y entonces tu programa ejecutable (por ejemplo: CONTA.EXE) podría buscarlo a GBAK.EXE allí mismo. O sea que si lo deseas podrías tener a GBAK.EXE en la misma carpeta donde tienes a CONTA.EXE

¿Qué versión de GBAK.EXE debo utilizar?

La misma versión que el Servidor del Firebird. Si por ejemplo tu versión del Firebird es la 2.5.4, entonces deberías siempre usar el programa GBAK.EXE que viene incluido en esa versión.

¿Y si no coincide la versión del Servidor del Firebird con la versión de GBAK.EXE?

Hmmmmmmm, eso no es recomendable. Podría funcionar bien pero … también podrían ocurrir errores, no hay garantías.

Una buena posibilidad para que no ocurran errores es tener al programa GBAK.EXE en una carpeta compartida. Y asegurándote que corresponde a la versión del Firebird que se está usando. Para no confundirte, puedes renombrar a GBAK.EXE para que te indique su versión, algo como: GBAK_2_5_4.EXE para saber que es el correspondiente a la versión 2.5.4 del Firebird.

Ejemplo:

  • En la carpeta compartida D:\EJECUTABLES\ tienes una copia de GBAK.EXE
  • Esa copia de GBAK.EXE coincide con la versión del Firebird que utilizas
  • Como tu versión del Firebird es la 2.5.4 entonces lo renombras como GBAK_2_5_4.EXE
  • Tus programas ejecutables que se encuentran distribuidos en un montón de computadoras (en nuestro ejemplo: CONTA.EXE) cuando necesitan hacer un backup llaman al programa D:\EJECUTABLES\GBAK_2_5_4.EXE

¿Cuáles son las ventajas de usar GBAK.EXE para hacer los backups?

  • Se obtiene una copia completa de la Base de Datos
  • Los usuarios pueden continuar trabajando normalmente mientras se realiza el backup
  • Al restaurar el backup se reconstruyen los índices y sus estadísticas
  • Al restaurar el backup se puede cambiar el tamaño de la página
  • En la Base de Datos restaurada se ha recolectado la basura y se ha realizado el barrido (sweep)
  • Se puede ver que tarea está realizando el programa
  • En el disco duro la Base de Datos restaurada se encuentra (generalmente) menos fragmentada que la Base de Datos original, y por lo tanto todos los accesos son más rápidos

¿Cuáles son las desventajas de usar GBAK.EXE para hacer los backups?

  • El archivo generado no puede ser utilizado directamente, debe ser restaurado con la misma versión de GBAK o con una versión posterior, para poder ser utilizado
  • Si la Base de Datos es muy grande, tanto hacer el backup como la restauración demoran mucho tiempo
  • Si la Base de Datos es muy grande, el archivo de backup también lo será
  • Si la Base de Datos es muy grande, habrá un período de muchos minutos (desde que empezó la ejecución del programa GBAK.EXE hasta que terminó) en que no se contará con un backup actualizado. De todo lo que haya ocurrido dentro de la Base de Datos en ese período no se tendrá un backup.

¿Cuáles son las consecuencias de usar GBAK para hacer backups?

  • La Base de Datos restaurada (si no ocurrieron errores durante la restauración) se encuentra en perfecto estado de salud. Eso significa: índices perfectamente balanceados, estadísticas correctas, nada de basura.
  • En la Base de Datos restaurada todas las filas de todas las tablas que se encontraban en la Base de Datos original ahora tienen un TID (identificador de la transacción) igual a 1.
  • Los identificadores de las transacciones (OAT, OIT, OST, NT) ahora tienen valores muy pequeños. NT (next transaction) no es igual a 1 porque al restaurar se realizan algunas tareas dentro de la Base de Datos y esas tareas inician transacciones. Pero de todas maneras el valor de NT siempre es pequeño, típicamente menos que 100.

¿Por qué en la Base de Datos restaurada algunas consultas son más lentas que en la Base de Datos original?

Uno supondría que en la Base de Datos restaurada, como su salud es perfecta todos los SELECT serían más rápidos que en la Base de Datos original pero … no siempre sucede así.

¿Por qué?

Bien, uno de los métodos que utiliza el Firebird para que las consultas sean muy rápidas es guardar en el caché de la computadora donde se encuentra el Servidor las filas retornadas por los últimos SELECTs.

Si el Servidor se apaga, todo el contenido del caché desaparece (porque se encuentra en memoria RAM, la cual es volátil). Pero en las organizaciones que nunca apagan el Servidor el contenido del caché sirve para agilizar de gran manera a las consultas. Si las filas que solicita un usuario ya se encontraban en el caché entonces desde allí le son entregadas, y eso es muchísimo más rápido que leerlas desde el disco duro.

Sin embargo, al restaurar una Base de Datos el caché se vacía (porque los identificadores de las transacciones cambiaron, ahora ya son todos 1) y entonces hay que reiniciar el proceso de ir cargando el caché.

Como consecuencia, algunas consultas (no todas, solamente las que tenían filas en el caché) serán más lentas en la Base de Datos restaurada que en la Base de Datos original. Claro que esto será solamente durante un corto tiempo, luego será distinto.

¿GBAK siempre realiza el backup correctamente?

No. Y esto es algo súper importante para recordar. Al hacer el backup, GBAK no verifica si los datos que está copiando tienen errores o no. Eso solamente se puede descubrir en el momento de la restauración, nunca en el momento del backup.

Por lo tanto, el backup que realizó GBAK …. puede ser totalmente inservible.

¿Terrible?

Sí, así mismo, eso es. Terrible.

Por ejemplo, una columna definida como NOT NULL tiene valores NULL. Tal cosa no debería ocurrir pero a veces la Base de Datos se corrompe y sucede. GBAK copia esas filas sin ningún aviso, ninguna advertencia, ningún mensaje de error. Sin embargo, al querer restaurar ese backup allí sí se enojará … y finalizará la restauración. El archivo que estaba generando se muere ahí mismo, se vuelve completamente inservible.

Hay métodos para solventar ese problema (que veremos en otro artículo) pero lo importante a recordar es:

JAMÁS SE DEBE CONFIAR EN EL BACKUP. JAMÁS

¿Cómo se puede saber si un backup está correcto?

Ya vimos que al hacer el backup GBAK no nos avisa si la Base de Datos tiene errores. Solamente nos avisa cuando está restaurando, así que por lo tanto….

La única manera de verificar que un backup está ok es restaurándolo.

No hay otra forma.

¿Cuál es la mejor manera de hacer y verificar un backup?

Escribiendo un comando que apenas termine el backup lo restaure, de esa manera enseguida sabremos si nuestro backup es confiable o si por el contrario es inútil (y por lo tanto debemos corregir los errores que tiene y realizar otro backup).

Ese comando es el siguiente:

GBAK -b -user SYSDBA -password masterkey MiBaseDatos.FDB stdout | GBAK -r -user SYSDBA -password masterkey stdin Restaurada.FDB

¿Qué hace este comando?

En lugar de crear un archivo de backup en el disco duro (que es lo normal), lo crea en la salida estándar (stdout). Luego realiza la restauración, tomando como archivo de entrada del segundo GBAK el archivo generado por el primer GBAK.

¿Consecuencia?

Que así hacemos un backup y también una restauración. Y si al restaurar ocurre algún error entonces lo sabremos al instante y podremos corregirlo.

Conclusión:

En el Firebird hay varios métodos para hacer backups, usar el programa GBAK.EXE es uno de esos métodos. Como todo, tiene algunas ventajas y algunas desventajas. Nunca jamás hay que confiar en que el backup está correcto y sin errores porque a veces sí tiene errores. Esos errores solamente pueden descubrirse cuando se está restaurando el backup, es el único momento en que se puede saber si el backup está correcto o no. Por lo tanto, una muy buena política administrativa es apenas terminado el backup intentar la restauración. Si el backup no se puede restaurar es inservible e inútil.

Artículos relacionados:

Los métodos para hacer backup

Backup y restauración al mismo tiempo

Backup y restore a una versión más nueva del Firebird

Entendiendo los identificadores de las transacciones

Entendiendo sweep y garbage collection

La Next Transaction después de un ciclo backup/restore

El ciclo backup/restore usando GBAK

El índice del blog Firebird21

El foro del blog Firebird21

Trabajando con grandes bases de datos

4 comentarios

Los problemas con los cuales nos encontramos al trabajar con bases de datos grandes son distintos a los problemas que tienen las bases de datos pequeñas.

Como las empresas constantemente están almacenando más y más datos las tablas van creciendo de tamaño diariamente, quizás minuto a minuto. Llega un momento en que la Base de Datos ya puede considerarse “grande”.

¿Cuándo una Base de Datos es grande?

Como muchas otras cosas en Informática, ésta también depende del punto de vista. Para alguien podría ser grande y para otros pequeña, aunque en general se considera “grande” a las bases de datos que alcanzan o superan un tamaño de 10 Gigabytes. En este blog se considera que:

  • Pequeña. Es una Base de Datos con tamaño menor a 1 Gb
  • Mediana. Es una Base de Datos cuyo tamaño está entre 1 Gb y 10 Gb
  • Grande. Es una Base de Datos cuyo tamaño es mayor que 10 Gb

Normalmente, si no se almacena multimedia (archivos gráficos, de sonido, de vídeo, etc.) las bases de datos van creciendo a un ritmo bastante parejo y predecible, por ejemplo podríamos tener una que crece alrededor de 1 Megabyte por día. Desde luego que algunos días crece más y algunos días crece menos, pero siempre está por ahí cerca.

Problemas típicos con las bases de datos pequeñas

  • Consultas lentas
  • Stored procedures o triggers lentos

Soluciones típicas a esos problemas

  • Optimizar las instrucciones SQL.
  • Realizar un ciclo backup/restore con el programa GBAK

El optimizar las instrucciones SQL (principalmente las cuatro principales: INSERT, UPDATE, DELETE, SELECT) conduce a una notoria mejoría en la velocidad. Muy relacionado con esto se encuentra el correcto manejo de las transacciones. Ante alguna corrupción restaurar el backup realizado con GBAK suele ser suficiente.

Problemas típicos con las bases de datos grandes

  • No se sabe donde está el problema
  • No se sabe por qué sucede
  • Realizar un ciclo backup/restore puede ser una gran pérdida de tiempo, porque la restauración puede demorarse un día o más, y no asegura que se haya solucionado el problema

Tareas administrativas diarias en las bases de datos grandes

Si ocurre un problema, puede demorarse mucho la solución así que lo más inteligente es evitar que ocurra. Para ello:

  1. Debe realizarse un backup con GBAK todos los días
  2. Debe verificarse el rendimiento de todas las transacciones
  3. Debe verificarse que todas las instrucciones SQL estén optimizadas
  4. Debe verificarse cada índice y la estadística de cada índice
  5. Debe verificarse que la estructura de la Base de Datos sea la más conveniente
  6. Debe verificarse el archivo FIREBIRD.LOG varias veces por día

Aunque realizar un ciclo backup/restore no nos asegura que solucionaremos todos los problemas, tener una Base de Datos grande sin backups actualizados es un suicidio. En las transacciones lo más importante es que ninguna demore mucho en completarse (“mucho” es relativo, pero en general si tarda más de un minuto entonces está tardando una eternidad). Las instrucciones SQL no optimizadas hacen perder tiempo, algo que no se puede permitir en estas circunstancias. Y no debemos olvidar que una instrucción SQL que hoy está optimizada y funciona perfectamente podría dejar de estarlo dentro de unos meses cuando la Base de Datos haya aumentado mucho de tamaño. Por eso la verificación debe hacerse diariamente.

El archivo FIREBIRD.LOG es el mejor lugar para verificar que todo esté correcto, si hay algún problema casi siempre aparecerá en ese archivo.

¿Cómo realizar el ciclo backup/restore?

Es bastante frecuente, aunque erróneo, hacerlo de esta manera:

Base de Datos —> Backup con el mismo nombre anterior

Por ejemplo, la Base de Datos se llama CONTA.FDB y el archivo de backup siempre se llama CONTA.FBK, ¿cuál es el problema potencial? Que si la Base de Datos está corrupta entonces el nuevo backup no servirá y el anterior no podrá ser utilizado porque fue sobre-escrito.

Lo correcto, por lo tanto, es hacer el backup de esta manera:

Base de Datos —> Backup con un nombre distinto al anterior

Esto evidentemente implica que tendremos varios archivos de backup, pero es preferible que sobren y no que falten.

El archivo delta

Cuando se ejecuta el programa GBAK para realizar un backup, éste hace el backup de todo el contenido que tiene en ese momento la Base de Datos. Es como si le tomara una fotografía. Nada que se realice con posterioridad se guardará en el backup ni en la Base de Datos, sólo lo que existía en el momento de iniciarse GBAK. Pero ¿y qué pasa con los datos que los usuarios continúan insertando, actualizando o borrando? Que no se guardan en la Base de Datos original sino en un archivo temporario llamado delta. Cuando GBAK finaliza, entonces todo el contenido del archivo delta se copia dentro de la Base de Datos.

Cuando hacemos backup de bases de datos pequeñas no vale la pena preocuparse por ese archivo delta pero cuando es una Base de Datos grande sí, porque no podemos permitirnos que esté corrupto. Un motivo podría ser que no haya suficiente espacio en el disco duro para el archivo delta.

La restauración

Aquí, es obligatorio que al finalizar un backup se realice un restore (en otro disco duro y preferiblemente en otra computadora) para asegurarnos de que se encuentre en perfectas condiciones y pueda ser utilizado en caso de necesidad.

Nada hay peor que creer que se tiene un backup actualizado pero eso no es cierto porque el backup se encuentra inservible. No ocurre frecuentemente, pero a veces ocurre, y no se puede tomar ese riesgo.

Los índices

Los índices en Firebird se utilizan en las búsquedas y en los filtros (cláusula WHERE) y cuando deseamos que los resultados aparezcan en un cierto orden (cláusula ORDER BY)

Para saber si un índice es el adecuado, es necesario, y se encuentra en buena salud, debemos verificar sus estadísticas. En Firebird los índices pueden degradarse y no debemos permitir que tal cosa ocurra.

Acciones a tomar si se descubre un problema

Estas son recomendaciones que a veces podrían no aplicarse, dependen de cada caso, pero servirán de guía:

  1. Una transacción está demorando mucho. Detectar cual es la transacción, cual es el programa culpable, y desconectar al usuario
  2. Una consulta está demorando mucho. Verificar cual es la consulta, mirar su PLAN y si es necesario crear un nuevo índice

Programas que se pueden utilizar cuando se trabaja con grandes bases de datos

Aunque detectar los problemas y solucionarlos podría hacerse manualmente, eso requerirá que la persona encargada conozca mucho del tema y que tenga suficiente tiempo y ganas para dedicarle a esa tarea. Para estos casos se justifica adquirir software que ayude en la detección y corrección. Los recomendados son:

  • FBDataGuard. Se ejecuta en la misma computadora donde se encuentra la Base de Datos. Su principal tarea es prevenir que se corrompa. Monitorea el rendimiento, realiza el backup en la forma correcta, obtiene estadísticas, y si descubre algún problema entonces envía un e-mail describiéndolo
  • FBScanner. Verifica cada instrucción SQL que el Cliente le envía al Servidor, puede realizar un análisis detallado de cada consulta, PLAN, transacción y conexión, de esta manera sirve para detectar los “cuellos de botella”, las transacciones que se demoran mucho, los usuarios que se desconectan de mala manera, y monitorea lo que un usuario o una aplicación están realizando.
  • IBTM. Monitorea y analiza transacciones dinámicas. Obtiene los valores de OIT, OAT, OST, NT y visualiza como se van moviendo. Detecta transacciones que se demoran mucho, los momentos en que muchas transacciones se están ejecutando, los momentos en que ocurre el sweep, la basura dejada por los ROLLBACKs.
  • IBAnalyst. Analiza las estadísticas de la Base de Datos e identifica posibles problemas que causan un bajo rendimiento: transacciones que demoran mucho, cantidad de versiones de los registros, registros que han sido borrados pero aún permanecen en la Base de Datos y por lo tanto demoran la lectura, promedio de transacciones por día, conexiones perdidas, índices no usados, índices con muchos valores repetidos, etc.
  • FBMonLogger. Detecta consultas lentas, transacciones que tienen un aislamiento incorrecto, basura que debe ser recolectada, uso de la memoria, etc.
  • Sinática. Monitorea a la Base de Datos en tiempo real, ayudando a detectar los procesos que consumen muchos recursos o que producen “cuellos de botella”, además de las transacciones que demoran mucho en finalizar.

Conclusión:

Aunque realizar las tareas administrativas de backup, verificación de las estadísticas de los índices, revisar el archivo FIREBIRD.LOG, etc. deberían hacerse regularmente con cualquier Base de Datos, cuando éstas son de gran tamaño esas tareas ya son una obligación imprescindible porque no se puede correr el riesgo de que se corrompa o de que funcione muy lentamente, muchas veces tales bases de datos deben funcionar 365/24/7 (o sea, los 365 días del año, durante las 24 horas, de cada uno de los 7 días de la semana) y cualquier demora o detención puede ser muy grave.

En estos casos, suele ser recomendable contratar a una persona cuya función sea la de Administrador de la Base de Datos y proveerle de las herramientas informáticas adecuadas para que pueda realizar efectivamente su labor.

Artículos relacionados:

El índice del blog Firebird

El foro del blog Firebird21

Artículos

Aumentando la velocidad de NBACKUP

2 comentarios

Como recordarás, Firebird viene con dos programas que te permiten hacer backups de las bases de datos:

  • GBAK.EXE
  • NBACKUP.EXE

Ambos tienen sus ventajas y sus desventajas, y es por eso que existen dos. Si uno de ellos fuera mejor en todo entonces el otro no existiría, no tendría razón de ser.

Cuando se hace el backup con el programa NBACKUP.EXE se puede usar el parámetro -D para aumentar la velocidad en que se realiza el backup.

¿Qué significado tiene el parámetro -D?

Habilita o deshabilita la copia directa, es decir sin la intervención del caché del sistema de archivos del sistema operativo.

A veces, escribiendo -D ON se consigue una mayor velocidad y a veces es escribiendo -D OFF se consigue una mayor velocidad.

¿Qué se debe escribir?

NBACKUP -U SYSDBA -P masterkey -B 0 MiBaseDatos.FDB MiBackup.NBK -D ON

Reemplazando por supuesto el ON por el OFF para probar la forma alternativa

¿Cómo saber cuál opción es mejor?

Probando de ambas formas y midiendo los tiempos empleados en realizar los respectivos backups.

En unas pruebas que hizo el autor de este blog con una Base de Datos de 580 Mb, los resultados fueron:

  • con el parámetro -D ON, 27 segundos
  • con el parámetro -D OFF, 12 segundos

En ese caso evidentemente -D OFF fue mejor, pero no siempre será así, dependiendo de tu Sistema Operativo y del tamaño de tu Base de Datos eso podría variar. Entonces, hay que probar.

Conclusión:

Si haces backups por intermedio del programa NBACKUP.EXE entonces deberías probar con el parámetro -D para descubrir si poniéndolo en ON o en OFF se obtienen mejores resultados.

Artículos relacionados:

El índice del blog Firebird21

El foro del blog Firebird21

 

Older Entries