Normalmente cuando desarrollamos nuestras aplicaciones trabajamos en una computadora y con una Base de Datos local. Luego, cuando la aplicación está operativa la instalamos en las computadoras de nuestros clientes, junto con la Base de Datos respectiva.

Pero como las aplicaciones no son estáticas es frecuente que debamos realizar algunos cambios en ellas y también en las bases de datos a las cuales se conectan. Por lo tanto podemos considerar que tenemos dos bases de datos:

  • De desarrollo (la que utilizamos para nuestras pruebas)
  • De producción (la que utilizan los usuarios de nuestra aplicación)

Los cambios en los metadatos (dominios, tablas, índices, stored procedures, triggers, etc.) los hacemos en la Base de Datos de desarrollo y luego queremos que la Base de Datos de producción tenga esos mismos metadatos.

Por ejemplo, si en la Base de Datos de desarrollo a la tabla PRODUCTOS le agregamos una columna llamada PRD_CANMAX (cantidad máxima que podemos tener de ese producto) que definimos como SMALLINT, también queremos que en la tabla PRODUCTOS de la Base de Datos de producción tengamos esa misma columna.

O sea que:

Todos los cambios que hagamos en la Base de Datos de desarrollo se reflejen en la Base de Datos de producción

Hay varias formas de realizar esa tarea, podemos hacerla manualmente (anotando todos y cada uno de los cambios que hacemos en la Base de Datos de desarrollo y luego hacer esos mismos cambios en la Base de Datos de producción), usando scripts, usando programas especializados.

En este artículo veremos como usar uno de esos programas especializados, su nombre es “Database Comparer”, de “Clever Components” y es gratis para uso no comercial.

Podemos leer su descripción (en inglés) aquí:

http://www.clevercomponents.com/products/dbcomparer/index.asp

Y podemos descargarlo desde aquí:

http://www.clevercomponents.com/downloads/dbc/index.asp

DATABASECOMPARER1

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

DATABASECOMPARER2

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

Como puedes ver en la imagen de arriba, viene en dos versiones: para computadoras de 32 bits y para computadoras de 64 bits. Por supuesto, elige el que corresponda a los bits de la computadora donde lo instalarás.

 Alternativamente, podemos descargarlo desde aquí:

http://www.mediafire.com/download/6au956m6adk6aes/DatabaseComparer.exe

Luego de instalarlo, al ejecutarlo veremos esta pantalla:

DATABASECOMPARER3

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

 Y luego de unos segundos, esta pantalla:

DATABASECOMPARER4

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

Database Comparer nos permite comparar las bases de datos de varios motores SQL (Firebird, Interbase, Sybase, MS SQL, MySQL). Para decirle que queremos comparar bases de datos de Firebird debemos elegir la pestaña IB/FB

DATABASECOMPARER5

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

 Y luego, la versión del Firebird de nuestras bases de datos:

DATABASECOMPARER6

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

 ¿Cómo funciona Database Comparer?

Comparando dos bases de datos: Master (la que tiene los metadatos actualizados) y Target (la que será actualizada). Por lo tanto, Master es nuestra Base de Datos de desarrollo y Target es la Base de Datos de producción (la que usan los usuarios de nuestra aplicación).

A ambas bases de datos debemos asignarles alias, o sea nombres alternativos. Eso lo hacemos eligiendo en el menú la opción “Database” y luego la opción “New database alias…” o haciendo clic en el icono respectivo

DATABASECOMPARER7

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

A continuación verás una ventana similar a la siguiente:

DATABASECOMPARER10

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

 Debes escribir:

  • El alias que deseas para tu Base de Datos (en este ejemplo el alias es DESARROLLO, pero tú puedes elegir cualquier otro)
  • El tipo de Base de Datos (debe ser “Interbase/FB” para Firebird)
  • La versión del Firebird (en este ejemplo es 2.5)
  • El protocolo (en este ejemplo es TCP/IP)
  • El puerto que utiliza el Servidor del Firebird (normalmente es 3050 pero en este ejemplo es 3051)
  • La ruta y el nombre completos de tu Base de Datos
  • La ruta y el nombre completo de la librería cliente (el archivo fbclient.dll)
  • El nombre del usuario (en este caso es SYSDBA)
  • La contraseña de este usuario (está oculta)

Luego, debes hacer clic en el botón “Test connect” para verificar que pueda conectarse a esa Base de Datos.

Si la conexión tuvo éxito verás algunas características de tu Base de Datos y al final la palabra “Passed”. Si por algún motivo falló la conexión entonces verás la palabra “Failed”.

A continuación, debes repetir todos esos pasos para crear el alias de la otra Base de Datos, como puedes ver en la siguiente captura de pantalla:

DATABASECOMPARER11

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

 En este caso el nombre del alias es “PRODUCCION”. Como se trata de otra Base de Datos también se cambió el valor de “Database name”. Recuerda que son dos bases de datos las que quieres comparar: la de desarrollo y la de producción. La de desarrollo inclusive podrías tenerla en un pen-drive.

A continuación, hay que especificar cual de esos alias se usará como Master y cual se usará como Target.

DATABASECOMPARER12

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

 Como puedes ver, a la izquierda tenemos los alias, a continuación de Master se eligió el alias que le corresponde a la Base de Datos que tiene los metadatos actualizados y a continuación de Target se eligió el alias que le corresponde a la Base de Datos que será actualizada. A la derecha el programa nos mostró la ubicación y el nombre de esas bases de datos (rodeadas con un óvalo azul).

Una vez que ya especificamos los alias y se los asignamos a Master y a Target el siguiente paso es comparar ambas bases de datos para encontrar las diferencias que hay entre ellas. Eso lo hacemos con el icono “Compare databases”

DATABASECOMPARER13

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

 El programa empezará a trabajar, generará scripts para ambas bases de datos, comparará dichos scripts y luego nos dirá si es necesaria la actualización.

DATABASECOMPARER14

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

Si vemos las palabras “Need Update” entonces sí se necesita actualizar el Target.

Para actualizarlo, hacemos clic en el botón “Execute script”

DATABASECOMPARER15

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

Si encontró algunos errores y por lo tanto no pudo actualizar el Target veremos un mensaje como este al final.

DATABASECOMPARER16

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

Y en este caso hay que buscar los errores y corregirlos.

En cambio, si la actualización se realizó con éxito veremos algo así:

DATABASECOMPARER17

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

 El mensaje “Script executed succesfully!” significa: “El script de actualización se ha ejecutado exitosamente”.

Y en consecuencia: la Base de Datos de producción ya tiene los metadatos idénticos a la Base de Datos de desarrollo.

Resumen:

Database Comparer de Clever Components nos permite comparar dos bases de datos para saber si sus metadatos son iguales o son diferentes. Y en caso de que sean diferentes puede actualizar a la Base de Datos que especificamos como Target para que sea idéntica a la Base de Datos que especificamos como Master.

Importante:

Aunque no es requerido, siempre es una muy buena idea hacer un backup de la Base de Datos de producción (esa donde los usuarios ingresan sus datos) antes de compararla y actualizarla. Así, si algo llegara a salir mal, siempre tendremos la posibilidad de restaurarla a su estado anterior.

Observación:

Metadatos se refiere al contenido interno de la Base de Datos (dominios, tablas, índices, stored procedures, triggers, generadores, excepciones, etc.) o sea lo que escriben los desarrolladores, no son los datos de los usuarios.