Вы находитесь на странице: 1из 7

Migraciones

Uno de los trabajos mas frecuentes (y mas odiosos) lidiando con bases de datos es la conversion de un formato a otro. Esta es una revision de algunas herramientas disponibles para pasar de formato xbase (.DBF) y Access (.MDB) a MySQL.

Metodologia bsica
Bsicamente se pueden dividir los metodos en directos e indirectos. Los metodos directos abren los archivos .DBF o .MDB, se conectan a la base de datos MySQL y transfieren sus contenidos a traves de esa coneccin. Los metodos indirectos generan uno o mas archivos temporales, en base a los que posteriormente se crearan las tablas de la base de datos y/o insertaran los registros. En el caso de metodos indirectos, para cada archivo .dbf o tabla Access, estos son los pasos basicos que han de tomarse para migrar: 1. Generar un archivo ASCII con las instrucciones SQL para la creacin de la/s tablas/s. 2. Exportar desde el archivo .MDB o archivos .DBF a un/unos archivo/s ASCII con: a) las instrucciones SQL para insertar datos en las tablas o b) los datos puros, delimitados por comas/tabulaciones, etc. 3. Ejecutar el archivo con las instrucciones SQL de creacion de tablas. 4. Ejecutar el archivo ASCII con instrucciones SQL de insercion, o IMPORTAR archivo ASCII con datos puros usando el comando sql LOAD DATA INFILE.

Entorno de trabajo
Para los propositos de este texto, vamos a definir algunos aspectos del ambiente donde trabajar:

Una estacion con Windows y Linux instalados. En la particin Linux, tener instalado un editor ASCII y la base de datos Mysql como mnimo, con el hostame configurado como localhost (bueh...) y con acceso a la particin windows, para este caso, tener acceso a c:/ en el directorio /mnt/windows). En la particin Windows tener instalado Microsoft Access version 97 como mnimo. Los archivos temporales de conversin se grabarn en el directorio c:/temp ( /mnt/windows/temp desde linux). Una base de datos, en ambos formatos .DBF y .MDB, en este caso conteniendo los datos de una coleccin de libros. Los archivos residiran en el directorio c:\data. Para usar la herramienta dbtools, es necesario contar con DOS estaciones conectadas en red, una con Windows y DBTools instalados y otra con Linux y MySQL instalados. Es recomendable acceder a la base de datos como un usuario comun con privilegios bien acotados, o en todo caso tener disponible varios usuarios tipo dependiendo del trabajo (tipo dba para acceso total, comun para entrada de datos o listados por ejemplo), pero NUNCA como root, porque este usuario tiene todos los privilegios en el sistema, incluso para danarlo seriamente.

Conversin sin herramientas especificas (o con herramientas nativas, o lo que sea bah...)
Hay buenas razones para no depender de herramientas especializadas de conversion (la mas sencilla de las cuales es no disponer de ellas , sin olvidar el masoquismo), como por ejemplo la necesidad de adaptar las tablas a las caracteristicas de la nueva base de datos. En mi caso en particular, siempre he tenido que generar la estructura con algun conversor y modificar o agregar sentencias sql para aprovechar alguna caracteristica ausente o diferente en la base de datos original.

Generar estructura con editor de texto


En ultima instancia he tenido que arreglarme creando las sentencias con cualquier editor ASCII:
CREATE DATABASE libros; CREATE TABLE autores( idautor INT NOT NULL, nombre CHAR (50), apellidos CHAR (50), PRIMARY KEY (idautor) ); CREATE TABLE autorlib( idautorlib INT NOT NULL, idautor INT, idlibro INT, PRIMARY KEY (idautorlibro) ); CREATE TABLE libros( idlibro INT NOT NULL, cargo CHAR (50), idtema INT, PRIMARY KEY (idlibro) ); CREATE TABLE temas( idtema INT NOT NULL, desctema CHAR (50), PRIMARY KEY (idtema) );

Luego de guardarlo como libros.sql, genero la base de datos pasando libros.sql por la consola mysql:
mysql < /mnt/windows/temp/libros.sql

Con esto ya tenemos creada la base de datos LIBROS con sus tablas. Esta estructura nos servira para convertir desde cualquier formato.

Exportar tablas desde Access

Despues, volviendo a Windows. desde Access, por cada tabla se usa la opcion "Archivo / Guardar como o exportar... / En un archivo o una base de datos externo", en la ventana de dialogo, en la opcion "Guardar como tipo:" seleccionar "Archivos de texto" En la ventana "..." seleccionando el boton "Avanzado..." se pueden configurar estas opciones de exportacion sin pasar por los sucesivos pasos del asistente: Formato de archivo: Delimitado Delimitador de campo: , Cualificador de texto: " Orden de la fecha: DMA Un poco confuso todo no? No es para tanto, probando con el programa todo se ve mas claro. Luego de este paso deberiamos tener cuatro archivos: autorlib.txt, autores.txt, libros.txt y temas.txt

Exportar tablas desde xBase


Practicamente cualquier dialecto xBase soporta el comando COPY TO (archivo) DELIMITED Para nuestro caso:
USE libros COPY TO libros.txt DELIMITED USE autores COPY TO autores.txt DELIMITED USE autorlib COPY TO autorlib.txt DELIMITED USE temas COPY TO temas.txt DELIMITED

Si es un entorno de comando se pueden ejecutar uno por uno, si es un lenguaje compilado como clipper, se graba en archivo .prg, se compila y se ejecuta. Otra vez, deberiamos tener cuatro archivos: autorlib.txt, autores.txt, libros.txt y temas.txt

Importacin de tablas a MySQL


En cualquiera de los dos casos, otra vez en linux, desde la consola MySQL se ejecuta el comando LOAD DATA INFILE por cada tabla
LOAD DATA INFILE '/mnt/windows/temp/libros.txt' INTO TABLE libros FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED LOAD DATA INFILE '/mnt/windows/temp/autores.txt' INTO TABLE autores FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED LOAD DATA INFILE '/mnt/windows/temp/autorlib.txt' INTO TABLE autorlib FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED LOAD DATA INFILE '/mnt/windows/temp/temas.txt' INTO TABLE temas FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\r\n'; BY '\r\n'; BY '\r\n'; BY '\r\n';

Xbase a Mysql
dbf2mysql
http://mysql.vision.cl/Downloads/Contrib/dbf2mysql-1.14.tar.gz&lsqb;1&rsqb; <&num;FTN.MIRROR> dbf2mysql es una pequea y excelente aplicacin que genera informacin SQL a partir de archivos xBase. He aqu una traduccin de sus opciones: -v -vvv -f -u -l -n -o <lista de campos> -e <archivo> -s <lista de campos> -i <lista de campos> -d <database> -t <tabla> -c -cc -p <campo> -h <host> -F -q muestra detalles de la conversin -vv muestra ms detalles incluye informe de progreso traduce los nombres de campo a minsculas traduce los textos de campos alfanumricos a maysculas traduce los textos de campos alfanumricos a minsculas no se agrega 'NOT NULL' en las sentancias de creacin de tabla exporta solo los campos listados archivo para conversion de caracteres permite cambiar nombres de campos. Ej -s NOMBRE=AYN,DIR=DIRECCION lista de campos a indexar (atte: genera UN indice por campo) base de datos donde se insertaran los datos tabla donde se insertarn los datos crea la tabla si no existe crea la tabla, pero no inserta registros indica la clave primaria indica server donde conectarse los campos caractes se formatean como de longitud fija modo rapido inserta los registros a travs de un archivo temporal usando la sentencia LOAD DATA INFILE quita espacios antes y despues de datos alfanumricos

-r

Suponiendo que quiero hacer una conversion directa, solo necesito crear la base de datos en blanco, por ejemplo desde la consola mysql:

create database libros; quit

Y luego ejecutar dbf2mysql para crear las tablas e insertar los datos:
dbf2mysql -h localhost -d /mnt/c/data/autores.dbf dbf2mysql -h localhost -d dbf2mysql -h localhost -d dbf2mysql -h localhost -d /mnt/c/data/autorlib.dbf libros -t autores -c -f -p idautor libros -t libros -c -f -p idlibro /mnt/c/data/libros.dbf libros -t temas -c -f -p idtema /mnt/c/data/temas.dbf libros -t autorlib -c -f -p idautorlib

La principal desventaja de este metodo es que no se crean algunos atributos deseables, como es el caso de los campos autoincrementables. En este caso, lo mas recomendable es crear nuestra propia estructura, otra vez volvemos al metodo de crear la estructura con un editor ASCII y generar la base de datos vacia con la consola MySQL. Luego se insertan los datos con este conjunto modificado de comandos dbf2mysql:
dbf2mysql dbf2mysql dbf2mysql dbf2mysql -h -h -h -h localhost localhost localhost localhost -d -d -d -d libros libros libros libros -t -t -t -t autores -f /mnt/c/temp/autores.dbf libros -f /mnt/c/temp/libros.dbf temas -f /mnt/c/temp/temas.dbf autorlib -f /mnt/c/temp/autorlib.dbf

Access a Mysql
access_to_mysql.txt
http://mysql.vision.cl/Downloads/Contrib/access_to_mysql.txt Este es un modulo de access que crea un archivo con las instrucciones sql para crear las tablas e insertar los registros, similar a como lo hace el comando mysqldump (bueno, por algo el archivo que se crea se llama mysqldump.txt). Para usarlo, ha de crearse un modulo de access y pegarle el contenido de access_to_mysql.txt para despues ejecutarlo. Al finalizar, quedara creado un archivo mysqldump.txt en el directorio c:/temp.

exportsql
http://mysql.vision.cl/Downloads/Contrib/exportsql.txt Este es otro modulo para access que genera archivos con instrucciones sql. La diferencia con el programa anterior radica en que lo podemos configurar a traves de unas variables declaradas al principio, por ejemplo:

ADD_SQL_FILE: contiene el directorio y archivo que contendra las instrucciones SQL de creacion e insercion. DEL_SQL_FILE: contiene el directorio y archivo que contendra las instrucciones SQL de borrado de las tablas. DISPLAY_WARNINGS: indica si las advertencias de errores se muestran durante el proceso de conversion (aconsejo cambiarlo a FALSE, porque si se da un error durante la conversin de registros y son muchos registros, se puede cansar de dar OK en el mensaje de error).

Previo a la definicin de cada tabla hay instrucciones DROP TABLE, que daran error en el caso de que se lo use con la base de datos vaca, para solucionarlo se pueden borrar estas instrucciones, o bien agregarles la clusula IF EXIST. A los campos que forman parte de la clave primaria se les debe agregar la clusula NOT NULL, o el script terminara con error cuando se intente crear las tablas. Despues de generados los archivos con estos modulos, hay que pasar a linux y ejecutarlos, a travs de la consola mysql. Para el caso de access_to_mysql, suponiendo que se creo la base de datos y que el archivo reside en /mnt/windows/temp/mysqldump.txt, las tablas se generan con este comando:
mysql < /mnt/windows/temp/mysqldump.txt

Para el caso de exportsql.txt, las tablas se generan con el comando:


mysql < /mnt/windows/temp/esql_add.txt

mdbtools
http://mdbtools.sourceforge.net Esta es una serie de utilidades linux para conversion y manejo de bases de datos Access: imprime la versin de la base de datos de un archivo .mdb (jet3 o 4). mdb-dump <archivo> volcado hexadecimal del contenido de un archivo .mdb. mdb-tables <archivo> genera una lista simple con las tablas contenidas en la base de datos, til para script de shell. mdb-schema <archivo> imprime las sentencias de creacin de las tablas. mdb-export &lsqb;-H&rsqb; &lsqb;-Q&rsqb; exporta una tabla a formato delimitado. La opcion -H &lsqb;-d <delimitador>&rsqb; <archivo> <tabla> suprime los titulos de columna, -Q no corta campos de texto entre comillas y -d cambia el delimitador por defecto. mdb-parsecsv <archivo> genera un programa .c a partir de un archivo generado por mdb-export. mdb-header <archivo> genera archivos .c y .h a ser usados para exportar archivos .mdb. mdb-ver <archivo>

mdb-sql <archivo> gmdb

motor sql simple. utilidad grafica que ana varias de las utilidades anteriores.

Este es un paquete que esta en su versin 0.4, asi que no es totalmente funcional, lo cual no quiere decir que no se lo pueda usar en ambiente de produccin. Bsicamente es posible acceder a las bases de datos sin utilizar Windows, creando el archivo de definicin de la base de datos con la utilidad mdb-schema (pero atencin, todavia genera las definiciones de ndices), crear los archivos temporales de conversin de datos con la utilidad mdb-export y posteriormente importarlos con el comando LOAD DATA INFILE en la consola mysql.

dbtools
www.dbtools.com.br Esta es una excelente aplicacin de autores brasileos, nativa de windows, que permite entre otras cosas convertir directamente desde muchos formatos, incluyendo Access y Xbase. Para trabajar con la base de datos, lo primero es conectarse al servidor MySQl, desde server manager, cargar los datos del servidor: ip, hostname, base de datos, usuario e iniciar la coneccin. Se inicia el proceso desde la opcion de menu Data/New Import Data Wizard, el wizard es muy explicativo y bastante exhaustivo y esta en la lengua nativa de la informtica: el ingls. En MySQL los nombres de tabla y campos son case-sensitive, es decir Apellido es diferente de apellido. Personalmente, me resulta engorroso recordar/tipear este tipo de informacion, asi que siempre elijo tener todo en minusculas. Access no hace este tipo de distincion, cosa que hay que tener en cuenta cuando se hace la conversion. MySQL tampoco es amigable en lo que se refiere a los nombres con espacios incluidos

Conclusin
Por mas completas que sean las herramientas, forman parte de un proceso que lleva varios pasos, casi siempre el resultado de la generacin de las estructuras debe ser corregido antes de pasarlas a la base de datos, y por lo general el sistema ms rapido para insertar datos es el comando LOAD DATA INFILE, asi que una combinacin de todos estos metodos suele ser buena alternativa. Y he incluido slo el tema de convertir, por asi decirlo, tabla a tabla, OTRO tema es la conversion desde un esquema de informacion totalmente diferente a uno normalizado para bases de datos. Por lo general en estos casos, se ha de programar un script de conversion, que tome los datos, por ejemplo de una planilla de clculo monoltica y la convierta en varias tablas normalizadas.

Вам также может понравиться