DBMT - Manual de usuario.
Inicio
--
english version of this manual
1.- Configurando el fichero XML.
Una migración se describe en un fichero XML que contiene todos los pasos a seguir.
Aunque este fichero es bastante sencillo, puede ser molesto de escribir, especialmente si la
migración tiene muchos pasos, así que ponte en contacto con nosotros si quieres escribir una
aplicación con interfaz gráfica para realizar esta tarea :-).
En todo caso, un fichero XML tiene que ser algo parecido a esto:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE migration SYSTEM "http://dbmt.sourceforge.net/dtds/migration_1_0.dtd">
<migration>
<databank>
<source
url="jdbc:mysql://127.0.0.1/DATABASE_SRC?user=USERNAME&password=PASSWORD"
driver="org.gjt.mm.mysql.Driver"
/>
<target
url="jdbc:postgresql://destiny/DATABASE_TGT?user=USERNAME&password=PASSWORD"
driver="org.postgresql.Driver"
/>
</databank>
<functions>
<function name="countrows"
sql="select count(*) from source_table where id > 0" />
<function name="count_greater_rows"
sql="select count(*) from source_table where id > ${current.id}" />
</functions>
<steps>
<step name="test_migration"
source_table="source_table"
target_table="target_table"
clear_target="true"
output="file"
sliced="true"
slice_size="1"
slice_key="Id"
>
<field from="id" to="item" type="int" value=""/>
<field from="datum" to="post-date" type="date" value=""/>
<field from="now" to="then" type="timestamp" value=""/>
<field from="somethingbig" to="athing" type="blob" value=""/>
<field from="text" to="description" type="string" value=""/>
<field from="" to="user" type="new-string" value="anonymous"/>
<field from="" to="today" type="new-date" value="2002-11-25"/>
<field from="" to="intvalue" type="new-int" value="0"/>
<field from="" to="count" type="new-int" value="${countrows}"/>
</step>
</steps>
</migration>
Puedes descargar una versión documetnada de este ejemplo desde aquí
1.1.- La etiqueta databank .
En este etiqueta definiremos las bases de datos usadas como fuenta y destino para esta migración,
indicando la UURL de conexión y el nombre del driver JDBC a utilizar. Ten en cuenta que los drivers JDBC
no estan incluidos en la distribución de DBMT, de modo que tendrás que añadirlos al classpath tu mismo.
Por supuesto este tag es obligatorio.
<databank>
<source
url="jdbc:mysql://127.0.0.1/DATABASE_SRC?user=USERNAME&password=PASSWORD"
driver="org.gjt.mm.mysql.Driver"
/>
<target
url="jdbc:postgresql://destiny/DATABASE_TGT?user=USERNAME&password=PASSWORD"
driver="org.postgresql.Driver"
/>
</databank>
Como veremos, DBMT puede escribir todas las snetencias de inserción en un fichero de texto en
lugar de ejecutarlas directamente en la base de datos de destino, lo cual es muy útil si las dos máquinas no estan
accesibles en el mismo momento o lugar. También en este caso tendremos que indicar a DBMT
una conexión fuenta y otra destino, aunque ya que no se ejecutarán sentencias SQL de inserción,
simplemente puedes repetir la información de la base de datos origen.
1.2.- La etiqueta functions.
La siguiente parte de una migración son las funciones. Una función es una sentencia SQL cuyo resultado puede
ser usado para calcular nuevos valores en la tabla destino.
Este tag es opcional, ya que muchas de las veces no se necesitan funciones.
<functions>
<function name="countrows"
sql="select count(*) from source_table where id > 0" />
</functions>
En ocasiones necesitaremos ejecutar estas funciones en base a los valores del registro actual en la migración.
Esto se puede hacer usando ${current.NOMBRE_DEL_CAMPO} en lugar de indicar solo el nombre de un campo.
<function name="count_greater_rows"
sql="select count(*) from source_table where id > ${current.id}" />
En este ejemplo, la clausula de selección variara para cada registro migrado, tomando el valor del campo
id fpara cada fila.
1.3.- La etiqueta steps.
Los steps o pasos son la parte más importante de una migración, ya que en cada paso
se define como han de cmabiar los campos de la tabla para ajustarse al nuevo esquema.
podemos escribir tantas etiquetas step como tablas queramos migrar.
<steps>
<step name="test_migration"
source_table="source_table"
target_table="target_table"
clear_target="true"
output="file"
sliced="true"
slice_size="1"
slice_key="Id"
>
FIELDS
</step>
</steps>
Primero indicamos alguna información de configuración: name (nombre),
source_table (tabla origen), target_table (tabla destino),
clear_target (limpiar destino) y output (salida).
Los tres priemros estan claros, el cuarto indica si se debe eliminar la información existente en la tabla destino
al comenzar la migración, y el quinto indica que tipo de salida producir. Este atributo
output puede tomar tres valores:
db file both
Con db los datos se insertarán directamente en la base de datos destino.
Con file se creará una fichero de texto con el nombre NOMBRE_DEL_PASO.sql
conteniendo todas las sentencias de inserción usando el nuevo esquema. Obviamente both (ambos)
producirá mabas salidas, a fichero y a la base de datos destino.
Si nuestra tabla es lo suficientemente grande para querer envitar una
select completa de los datos y si nuestro driver soporta JDBC 2.0, podemos
dividir los datos de la tabla en porciones para realizar la migración
en porciones más pequeñas ajustando el valor del atributo
sliced a true.
entonces podremos usar slice_size y
slice_id para configurar estas partes.
Después tendremos que escribir como se procesarán los campos. Podemos pasar un campo de un
determinado tipo del viejo esquema al nuevo, dejando el atributo value (valor)
vacio e introduciendo el tipo adecuado en el atributo type.
Hasta ahora solo se soportan
string, date, int,
timestamp and blob,
principalmente porque hasta ahora no
hemos necesitado más, pero sdebería ser muy sencillo añadir más.
<field from="id" to="item" type="int" value=""/>
<field from="datum" to="post-date" type="date" value=""/>
<field from="text" to="description" type="string" value=""/>
<field from="now" to="then" type="timestamp" value=""/>
<field from="somethingbig" to="athing" type="blob" value=""/>
Si el nuevo esquema tiene algunos campos nuevos podemos asignarles un valor fijo
dejando el atributo from (de) vacio y añadiendo el texto
new- (nuevo-) al comienzo del tipo, indicando el valor
en el atributo value (valor).
<field from="" to="user" type="new-string" value="anonymous"/>
<field from="" to="today" type="new-date" value="2002-11-25"/>
<field from="" to="intvalue" type="new-int" value="0"/>
<field from="" to="then" type="new-timestamp" value=""/>
Para nuevos valores también podems usar las funciones ya definidas, indicando el nombre
de la función en el atributo value como sigue::
<field from="" to="count" type="new-int" value="${NOMBRE_FUNCION}"/>
2.- Ejecución.
Sencillom ejecuta la clase
org.javahispano.dbmt.MigrationRunner
indicando tu fichero XML como parámtro.
Como con todo programa escrito en java, necesitarás añadir al classpath todas las clases necesarias,
por ejemplo el driver JDBC de tu SGBD y las del parser XML
(crimson y JAXP estan incluidos en el directorio "lib").
*nix:
java -cp dbmt.jar:MORE_JARS org.javahispano.dbmt.MigrationRunner migration.xml
Windows:
java -cp dbmt.jar;MORE_JARS org.javahispano.dbmt.MigrationRunner migration.xml
3.- Licencia.
DBMT se distribuye bajo la
Licencia Pública GNU (GPL)
|