Você está na página 1de 61

UNIVERSIDADE ESTADUAL DO SUDOESTE DA BAHIA UESB DEPARTAMENTO DE CINCIAS EXATAS DCE COLEGIADO DE CINCIA DA COMPUTAO CCC FBIO DA SILVA

LVA LLIS

DBMIGRATOR: FERRAMENTA PARA MIGRAO DE BANCOS DE DADOS MYSQL PARA POSTGRESQL

Vitria da Conquista BA 2008

FBIO DA SILVA LLIS

DBMIGRATOR: FERRAMENTA PARA MIGRAO DE BANCOS DE DADOS MYSQL PARA POSTGRESQL

Monografia apresentada ao curso de Cincia da Computao da Universidade Estadual do Sudoeste da Bahia UESB, como requisito para obteno do ttulo de Bacharel em Cincia da Computao. Orientadora: Aline Silva Costa.

Vitria da Conquista BA 2008 2

FBIO DA SILVA LLIS

DBMIGRATOR: FERRAMENTA PARA MIGRAO DE BANCOS DE DADOS MYSQL PARA POSTGRESQL

Monografia apresentada ao curso de Cincia da Computao da Universidade Estadual do Sudoeste da Bahia UESB, como requisito para obteno do ttulo de Bacharel em Cincia da Computao.

Banca examinadora:

Orientadora:

___________________________________________ Aline Silva Costa Universidade Estadual do Sudoeste da Bahia - UESB

Membro:

___________________________________________ Bruno Silva Costa Universidade Estadual do Sudoeste da Bahia - UESB

Membro:

___________________________________________ Ctia Khouri Universidade Estadual do Sudoeste da Bahia - UESB

Vitria da Conquista BA 2008 3

Dedicatria

Dedico este trabalho ao meu grande amigo Alcides Santana Neto, por me ensinar tantas coisas sobre a vida. 4

Agradecimentos

Aos amigos Eudes, Alexandre e Igor pelo companheirismo, ao amigo Wilson pelas dicas fundamentais que me ajudaram a aperfeioar este trabalho, meus sinceros agradecimentos. 5

Resumo
Atualmente, a migrao de bancos de dados uma tarefa que carece de ferramentas gratuitas que auxiliem sua execuo de forma satisfatria. Este trabalho visa apresentar o DBMigrator, um software gratuito, desenvolvido utilizando a linguagem de programao Java, capaz de migrar um banco de dados do servidor MySQL para o servidor PostgreSQL. So apresentadas as etapas de desenvolvimento do projeto, desde sua concepo, at sua implementao, detalhando as alternativas encontradas para as resolues dos problemas mais relevantes. Finalmente, mostrado um exemplo de migrao simultnea de dois esquemas de bancos de dados feita pelo DBMigrator, seguida de sugestes de trabalhos futuros que possam estender e aprimorar as funcionalidades deste software.

PALAVRAS-CHAVE: Migrao de bancos de dados, MySQL, PostgreSQL.

Abstract
Currently, the database migration is a task that need free tools that support your execution nicely. This work pretends show the DBMigrator, a free software, developed using a programming language Java, able to migrate a database from MySQL server to PostgreSQL server. The steps of the project development are showed, from its conception, until its implementation, detailing the alternatives found to resolution of the most relevant problems. Finally, an instance of simultaneous migration of two database schemas, executed by DBMigrator, is shown, followed future works suggestions that can expand and improve the functions of this software.

KEYWORDS: Database migration, MySQL, PostgreSQL.

Lista de Figuras
Figura 1: Diagrama de casos de uso. Figura 2: Diagrama de classes do pacote logical. Figura 3: Diagrama de classes do pacote view. Figura 4: Tela de acompanhamento de progresso. Figura 5: Comandos de criao de tabelas provenientes do MySQLDump e do DBMigrator. Figura 6: Comparativo de criao de ndices no MySQLDump e no DBMigrator. Figura 7: Comparativo de criao de chaves estrangeiras no MySQLDump e no DBMigrator. Figura 8: Comparativo de criao de funes no MySQLDump e no DBMigrator. Figura 9: Sinopse da sintaxe de criao de um gatilho no PostgreSQL. Figura 10: Salvando os comandos de criao. Figura 11: Comparativo de insero de dado binrio feita pelo MySQLDump e pelo DBMigrator. Figura 12: DBMigrator: Tela de Incio. Figura 13: Tela de Conexes. Figura 14: Tela de Progresso das Conexes. Figura 15: Tela de Seleo dos Esquemas. Figura 16: Tela de Seleo dos Objetos. Figura 17: Tela de Criao da DDL. Figura 18: Tela de Opes de Criao. Figura 19: Tela de Progresso da Migrao. Figura 20: Tela de Opes de Insero. Figura 21: Tela de Progresso da Transferncia dos Dados. Figura 22: Tela de Resumo.

Lista de Tabelas
Tabela 1: Tipos de dados do MySQL. Tabela 2: Tipos de dados do PostgreSQL 8.0. Tabela 3: Equivalncia de tipos de dados entre MySQL e PostgreSQL.

Lista de Abreviaturas
SGDB TI IDE SQL ISO ANSI DDL DML GNU GPL SGBDOR PL DBA Sistemas Gerenciador de Bancos de Dados Tecnologia da Informao Integrated Develop Environement Structured Query Language International Standards Organization American National Standards Institute Data Definition Language Data Manipulation Language GNU Is Not Unix General Public License Sistema Gerenciador de Bancos de Dados Objeto Relacional Procedural Language Database Administrator

10

Sumrio
1. Introduo ........................................................................................................................ 13 1.1. 1.2. 1.3. Objetivo ..................................................................................................................... 13 Justificativa ................................................................................................................ 13 Metodologia ............................................................................................................... 14

2. Bancos de Dados e Migrao entre SGBDs .................................................................... 16 2.1. 2.2. 2.3. 2.4. 2.5. 2.6. Os Bancos de Dados .................................................................................................. 16 Os Sistemas Gerenciadores de Bancos de Dados ...................................................... 17 SQL ............................................................................................................................ 18 O SGBD MySQL ....................................................................................................... 19 O SGBD PostgreSQL ................................................................................................ 20 A Migrao entre SGBDs .......................................................................................... 21

3. Modelagem da Ferramenta .............................................................................................. 24 3.1. 3.2. 3.3. Descrio dos Requisitos ........................................................................................... 24 Diagrama de Casos de Uso ........................................................................................ 24 Diagramas de Classes ................................................................................................ 25

4. Implementao da Ferramenta ......................................................................................... 27 4.1. Projeto da Interface com o Usurio ........................................................................... 27

4.1.1. Diviso das Etapas do Processo de Migrao ............................................................ 27 4.1.2. Acompanhamento do Progresso das Operaes ....................................................... 28 4.1.3. Tratamento de Erros ................................................................................................... 29 4.2. Migrao dos Esquemas ............................................................................................ 29

4.2.1. O MySQLDump ........................................................................................................ 29 4.2.2. Migrao de Tabelas e Vises ................................................................................... 30 4.2.3. Migrao de ndices ................................................................................................... 32 4.2.4. Migrao de Chaves Estrangeiras .............................................................................. 33 4.2.5. Migrao de Funes ................................................................................................. 34 4.2.6. Migrao de Gatilhos ................................................................................................. 35 4.2.7. Gerao de DDL ........................................................................................................ 36 4.3. Migrao dos Dados .................................................................................................. 36

4.3.1. Tratamento dos tipos binrios .................................................................................... 37 4.3.1.1.Tipos binrios no MySQL ......................................................................................... 37 4.3.1.2.Tipos binrios no PostgreSQL ................................................................................... 37 11

4.3.1.3.Soluo para a equivalncia de tipos binrios ........................................................... 38 4.3.2. Preservao da Integridade Referencial ..................................................................... 39 4.4. Resumo do processo de migrao .............................................................................. 39

5. Apresentao da Ferramenta ............................................................................................ 40 6. Concluso......................................................................................................................... 48 7. Referncias ....................................................................................................................... 49 Apndice A Tipos de Dados do MySQL ............................................................................ 51 Apndice B Tipos de Dados do PostgreSQL ...................................................................... 55 Apndice C Documentao dos Casos de Uso ................................................................... 57

12

1. Introduo
Um Sistema Gerenciador de Banco de Dados (SGBD) um conjunto de programas que permite ao usurio a criao e manuteno de um banco de dados. Desta forma, um SGBD pode ser definido como um software de propsito geral que simplifica os processos de construo, manipulao e compartilhamento de bancos de dados entre vrios usurios e aplicaes. Atualmente, existem vrios SGBDs no mercado como o Oracle e o SQL Server, e existem tambm os SGBDs livres, como o MySQL e o PostgreSQL. Estes dois so sistemas de cdigo aberto, o que significa que qualquer pessoa pode us-los e alter-los sem pagar nada. Devido sua larga utilizao na Web, o MySQL tornou-se um SGBD de cdigo aberto de grande popularidade. Dentre suas qualidades esto a rapidez, confiabilidade e facilidade de utilizao. Segundo sua comunidade de usurios, o PostgreSQL destaca-se por ser o SGBD de cdigo aberto mais avanado que existe. Isto se d, principalmente, devido sua robustez e possibilidade de ser estendido pelo usurio de muitas maneiras, incluindo a adio de tipos de dados, funes, operadores, mtodos de ndice e linguagens procedurais. Frequentemente, desenvolvedores de sistemas se vem obrigados a migrar um banco de dados de um SGBD para outro. Isto ocorre quando um SGBD no atende mais s demandas dos sistemas que o utilizam. Existem ferramentas que viabilizam esta migrao de maneira eficiente, porm, na sua maioria, no so gratuitas e nem de cdigo aberto. O objetivo deste trabalho consiste no desenvolvimento de uma ferramenta para migrao de bancos de dados entre dois SGBDs, do MySQL para o PostgreSQL.

1.1.

Objetivo
Desenvolver um software capaz de migrar um banco de dados do MySQL para o

PostgreSQL.

1.2.

Justificativa
Quando o profissional de TI de uma empresa opta por mudar de SGBD, seu desejo ,

geralmente, que isto ocorra de modo rpido e com custo baixo. Entretanto, o processo de migrao no trivial e no pode ser realizado com eficincia se executado manualmente.

13

Em um processo de migrao manual, o desenvolvedor tem de extrair uma cpia da estrutura do banco de dados de origem e trabalhar nela para criar uma nova estrutura compatvel com o SGBD de destino. Devem ser feitas equivalncias entre os tipos de dados que diferem entre os SGBDs, bem como de funes nativas incorporadas ao SQL padro. Outra questo que demanda tempo a equivalncia dos procedimentos armazenados, stored procedures, pois comum que sejam utilizadas diferentes linguagens procedurais em SGBDs diferentes. Enfim, a migrao manual no vivel em termos de eficincia. Os problemas de eficincia relacionados migrao manual podem ser resolvidos com a aquisio de uma ferramenta apropriada. Todavia, no existem ferramentas gratuitas que possibilitem a migrao de forma satisfatria, principalmente no que diz respeito equivalncia de procedimentos armazenados. evidente a necessidade de se criar uma ferramenta gratuita capaz de migrar estrutura e dados de um SGBD para outro.

1.3.

Metodologia
Considerando as medidas adotadas para o desenvolvimento deste projeto, seu carter

pode ser classificado como uma pesquisa do tipo exploratria. Inicialmente, foi realizado um estudo sobre os SGBDs em questo, levando em conta a diversidade de verses e caractersticas inerentes a cada um deles. Esta tarefa deu subsdios para a definio do escopo da ferramenta, ou seja, para a identificao de quais verses dos sistemas a ferramenta daria suporte. Entre as caractersticas de cada SGBD que foram pesquisadas, estavam as linguagens procedurais suportadas, os tipos de dados e suas equivalncias, as funes nativas e suas correspondncias e os mecanismos para a definio de gatilhos, triggers, e vises, views. Com posse dessas informaes, puderam ser descritos e documentados os requisitos do sistema que serviram de entrada para o processo de desenvolvimento. A anlise destes requisitos serviu ainda para a definio da arquitetura do sistema, levando-se em considerao questes como alta flexibilidade e facilidade de extenso. Foi feito um levantamento dos princpios de Interface Homem Computador, que se aplicam modalidade da ferramenta em questo, para posterior incorporao ao projeto. A linguagem de programao Java foi escolhida para a implementao da ferramenta por se tratar de uma linguagem orientada a objetos, o que facilitou a organizao dos mdulos

14

que compem o software. Para viabilizar a construo da ferramenta, sobretudo da interface grfica, foi utilizada a IDE EasyEclipse Desktop Java.

15

2. Bancos de Dados e Migrao entre SGBDs


Este captulo tem como objetivo apresentar conceitos e definies dos aspectos relacionados aos bancos de dados e seu gerenciamento. Tambm so apresentados os servidores MySQL e PostgreSQL e, finalmente, explicado o conceito de migrao entre SGBDs.

2.1.

Os Bancos de Dados
Segundo Elmasri e Navathe (2005), pode-se perceber a presena dos bancos de dados

em situaes como a realizao de uma transao bancria, a consulta de um determinado livro em um acervo de uma biblioteca informatizada, ou mesmo na compra de um produto em um site de comrcio eletrnico. Estes so exemplos tpicos de aplicaes tradicionais de bancos de dados, onde a maioria das informaes armazenadas e acessadas pode ser resgatada em formato textual ou numrico. Um banco de dados pode ser definido, de forma genrica, como uma coleo de dados relacionados. Um dado qualquer fato que pode ser gravado e que possui um significado, mesmo que este significado no esteja explcito. Por exemplo, um conjunto de nomes e idades de pessoas anotados em um caderno uma coleo de dados cujo significado no est explcito, portanto, um banco de dados (ELMASRI; NAVATHE, 2005). O emprego do termo banco de dados utilizado geralmente de maneira mais restrita, pois para a formulao do conceito de banco de dados convencional devem ser observadas as seguintes propriedades: Um banco de dados deve modelar um cenrio do mundo real, o que comumente denominado minimundo. Essa representao no deve ser esttica, de maneira que as alteraes que ocorrem no minimundo devem ocasionar mudanas no banco de dados. Em um banco de dados, os dados esto relacionados de maneira lgica e coerente. Uma coleo de dados aleatrios sem nenhum relacionamento e sem um significado inerente no constitui um banco de dados. Um banco de dados deve ser projetado e construdo para atender s necessidades de um grupo de usurios. Desta forma, os bancos de dados devem ter uma fonte de onde os dados so provenientes, devem estar relacionados de maneira interativa com aspectos do mundo real e devem disponibilizar seus contedos para um determinado grupo de usurios. 16

Embora os bancos de dados possam ser gerados e mantidos manualmente, o escopo deste trabalho limita-se ao estudo dos bancos de dados informatizados, ou seja, aqueles gerenciados com o auxlio de computadores. Quando se define um banco de dados, so especificados os tipos de dados e as restries para os dados que sero armazenados. No processo de construo do banco de dados, os dados so armazenados em alguma mdia apropriada e so controlados por um Sistema Gerenciador de Bancos de Dados.

2.2.

Sistemas Gerenciadores de Bancos de Dados - SGBDs


Silberschatz, Korth e Sudarshan (1999) definem um Sistema Gerenciador de Banco de

Dados como uma coleo de arquivos e programas inter-relacionados que permitem ao usurio o acesso para consultas e alteraes desses dados.
Um sistema gerenciador de banco de dados (SGDB) uma coleo de programas que permite aos usurios criar e manter um banco de dados. O SGBD , portanto, um sistema de software de propsito geral que facilita os processos de definio, construo, manipulao e compartilhamento de bancos de dados entre vrios usurios e aplicaes (ELMASRI; NAVATHE, 2005).

Entre as principais vantagens do uso de um SGBD em um sistema de banco de dados esto a utilizao de metadados, a possibilidade de se criarem mltiplas vises dos dados e o processamento de transaes concorrentes. Os metadados so informaes sobre os dados que esto armazenados em um banco. Essas informaes vo desde os tipos de dados at as especificaes de restries sobre os dados. Os metadados so utilizados tanto pelo SGBD como pelos usurios que precisam de informaes sobre a estrutura do banco. Em um banco de dados com muitos usurios, comum que cada usurio deseje ter diferentes perspectivas dos dados. Os SGBDs possibilitam a criao de vises do banco de dados, que podem ser um subconjunto do banco de dados ou uma derivao dos dados prexistentes. Um SGBD pode possibilitar o acesso simultneo de muitos usurios ao banco de dados. Para isso necessrio que ele tenha implementado um controle de concorrncia que garanta que os usurios acessem um dado de maneira controlada e que as atualizaes ocorram sem erros. A classificao de um SGBD feita observando-se uma srie de caractersticas. Dentre as principais est o modelo de dados no qual o SGBD baseado. O modelo de dados de 17

objetos foi criado com o intuito de adaptar-se melhor ao paradigma das linguagens de programao orientadas a objeto. No entanto, sua utilizao ainda no foi muito difundida. O modelo de dados relacional atualmente o mais utilizado. Sua simplicidade, em comparao ao modelo de objetos, contribui para isso. Os SGBDs relacionais tm evoludo e incorporado caractersticas dos SGBDs de objetos, dando origem a uma nova categoria de SGBD, os SGBDs objeto-relacional. Um modelo de dados de objeto baseia-se em objetos definidos em termos de propriedades e operaes. Os objetos com estrutura e comportamento semelhantes pertencem a uma classe, e as classes podem estar relacionadas formando hierarquias. Elmasri e Navathe (2005) descrevem, resumidamente, um modelo de dados relacional como sendo a representao de um banco de dados como uma coleo de tabelas relacionadas, na qual cada uma delas pode ser armazenada como um arquivo separado. A maioria dos SGBDs relacionais utiliza uma linguagem de consulta de alto nvel chamada SQL.

2.3.

A Linguagem SQL
A SQL o padro de linguagens de consulta para bancos de dados relacionais e possui

diversas verses. A primeira verso foi desenvolvida pela IBM e se chamava Sequel. Com o passar do tempo, a linguagem foi evoluindo e teve seu nome mudado para SQL (Structured Query Language Linguagem de Consulta estruturada). Em 1986, a International Standards Organization (ISO) e o American National Standards Institute (ANSI) publicaram padres para a SQL que passou a se chamar SQL-86. Uma extenso para o padro SQL foi publicada em 1989, a SQL-89. Aps a SQL-89, foi lanada a verso SQL-92 do padro ANSI/ISO (KORTH, 1999). A prxima verso do padro foi originalmente chamada SQL3, mas atualmente conhecida como SQL-99 (ELMASRI; NAVATHE, 2005). A verso atual da linguagem a SQL-2003. Sob as ticas de Silberschatz, Korth e Sudarshan (1999), a linguagem SQL divide-se em linguagem de definio de dados, linguagem interativa de manipulao de dados, definio de vises, autorizao, integridade e controle de transaes. A parte relacionada linguagem de definio de dados (Data-definition Language DDL) proporciona comandos para a definio de esquemas de relaes, excluso de relaes, criao de ndices e modificao nos esquemas de relaes. A SQL DDL engloba comandos para a definio de vises, comandos para a definio de acesso a relaes e vises e 18

comandos para a especificao de regras de integridade que devero ser satisfeitas pelos dados que sero armazenados no banco de dados. Atualizaes que violarem essas regras no sero consideradas. No que tange linguagem interativa de manipulao de dados (Data-manipulation Lamguage - DML), a SQL engloba uma linguagem de consulta baseada tanto no clculo relacional de tuplas quanto na lgebra relacional. Abrange tambm comandos para a insero, excluso e modificao de tuplas no banco de dados. Com relao ao controle de transaes, a SQL inclui comandos que servem para especificar a iniciao e a finalizao de transaes. possvel tambm explicitar bloqueios de dados para controle de concorrncia.

2.4.

O SGBD MySQL
O MySQL um SGBD relacional de cdigo aberto extremamente rpido e fcil de usar.

Possui um conjunto de recursos muito prticos desenvolvidos com a ajuda de sua comunidade de usurios. Sua velocidade e segurana fazem com que ele seja muito utilizado na Internet. Na viso de Maslakowski (2000), o MySQL suficientemente grande e suficientemente rpido para funcionar em quase qualquer situao. O MySQL escrito em C e C++ e extremamente portvel, pois funciona em diversas plataformas diferentes, como Linux 2.0+, Mac OS X Server e Windows 9x, Me, NT, 2000 e XP. Outra caracterstica importante que o MySQL um servidor multithread, o que significa que toda vez que algum estabelece uma conexo com o servidor, o programa de servidor cria um thread (encadeamento), ou processo, para tratar as solicitaes desse cliente (MASLAKOWSKI, 2000). Desta forma, cada cliente que se conecta ao SGBD obtm seu prprio thread. O Sistema distribudo sob a GNU General Public License (GPL) que uma licena de uso que permite sua utilizao gratuita. Para os casos em que as necessidades da empresa que utiliza o SGBD no se enquadram nos termos da licena, possvel comprar uma licena comercial. Uma das principais restries da GPL diz que se algum sistema for disponibilizado em conjunto com outro sistema distribudo sob a licena GPL, o primeiro sistema tambm deve disponibilizar o seu cdigo fonte. O MySQL d suporte a diversos tipos de dados, entre eles, tipos numricos, tipos para tratamento de data e cadeias de caracteres. A documentao do MySQL na verso 4.1 apresenta os tipos de dados listados na Tabela 1 do Apndice A. 19

O MySQL fornece uma hierarquia de tipos de dados especiais. Alguns desses tipos guardam valores de geometria nicos. So eles: GEOMETRY, POINT, LINESTRING E POLYGON. O tipo GEOMETRY o mais genrico, pois pode armazenar geometrias de qualquer tipo, ao contrrio dos demais que restringem seus valores a geometrias de tipos especficos. Os outros tipos de dados armazenam colees de valores, so eles: MULTIPOINT, MULTILINESTRING, MULTIPOLYGON e GEOMETRYCOLLECTION. Os tipos GEOMETRYCOLLECTION podem armazenar uma coleo de objetos geomtricos de qualquer tipo, enquanto os demais restringem o tipo dos membros da coleo a um tipo de geometria especfico. Em sua verso 4.0, o MySQL segue o padro SQL-92 e tem como alvo para as prximas verses dar suporte total ao padro SQL-99. Stored procedures (procedimentos armazenados) e funes so recursos novos do MySQL verso 5.0. Um procedimento armazenado um conjunto de comandos escritos em uma linguagem que pode ser armazenado no servidor de banco de dados. Desta forma, os usurios no precisam realizar estes comandos, mas apenas fazer referncia aos procedimentos armazenados. Esta prtica possibilita um aumento de desempenho j que menos informao precisa ser trocada entre o servidor e o cliente. Por outro lado, isto aumenta a carga no sistema do servidor do banco de dados, j que a maior parte do trabalho feita no servidor enquanto a menor parte feita do lado do cliente. O MySQL segue a sintaxe SQL-2003 para a definio de procedimentos armazenados, no utilizando, portanto, uma linguagem que seja especificamente procedimental.

2.5.

O SGBD PostgreSQL
O PostgreSQL um sistema gerenciador de banco de dados objeto relacional

(SGBDOR) construdo com base no POSTGRES, desenvolvido pelo departamento de Cincia da Computao da Universidade da Califrnia em Berkeley. Em sua verso 8.0, suporta grande parte do padro SQL-2003 alm de oferecer muitas funcionalidades modernas como chaves estrangeiras, gatilhos, vises e integridade transacional. Alm disso, ele pode ser estendido pelo usurio de vrias maneiras como, por exemplo, adicionando novos tipos de dado, funes, operadores, funes de agregao e linguagens procedurais. Por possuir uma licena liberal, o PostgreSQL pode ser utilizado, modificado e distribudo por qualquer pessoa, seja para fins acadmicos, privados ou comerciais. Sua licena permite a utilizao do sistema com iseno de encargos. 20

O PostgreSQL 8.0 disponibiliza um grande conjunto de tipos de dados nativos que esto listados na Tabela 2 do Apndice B. A comunidade de usurios do PostgreSQL verificou o seu funcionamento em diversas plataformas. Entre as mais populares esto Windows, Mac OS X, Debian GNU/Linux, Fedora, Red Hat Linux, Suse Linux e FreeBSD (THE POSTGRESQL GLOBAL DEVELOPMENT GROUP, 2008). As funes definidas pelo usurio podem ser escritas no PostgreSQL naturalmente em SQL. Entretanto, outras linguagens podem ser utilizadas alm da SQL. Estas linguagens so chamadas genericamente de linguagens procedurais (PLs). Quando uma funo escrita em alguma linguagem procedural, o PostgreSQL no possui nenhum conhecimento interno sobre como interpretar o cdigo fonte da funo. Neste caso, a tarefa passada para um tratador especial que conhece os detalhes da linguagem e que exerce funes como as anlises lxica e sinttica e a execuo. As quatro linguagens procedurais disponveis na atual distribuio do postgreSQL so: PL/pgSQL, PL/Tcl, PL/Perl e PL/Python. Os usurios podem ainda definir outras linguagens.

2.6.

A Migrao entre SGBDs


Com o aumento do uso dos computadores e sistemas de informao nas ltimas

dcadas, foi criado um grande nmero de tecnologias de gerenciamento de dados. Estas tecnologias vo desde sistemas que organizavam seus dados em arquivos de texto at sistemas relacionais de bancos de dados de grande porte. Independentemente do tipo de soluo de armazenamento utilizado, o que h dcadas era a melhor soluo, hoje est desatualizado. Nestes casos, comum a tomada de deciso de migrar os dados de um sistema para outro. A tecnologia desatualizada, no entanto, no o nico motivo que encoraja uma empresa a migrar seus dados. Outros fatores incluem um menor custo de propriedade, um melhor desempenho e o aumento de escalabilidade e segurana. O esquema o conjunto de descries que definem os tipos de dados e sua organizao para o sistema de gerenciamento de banco de dados (STERN SOFTWARE, 2008). Dependendo da complexidade do banco de dados, podem existir muitos ou poucos tipos de dados. Mesmo nos sistemas de banco de dados mais simples, os tipos numricos e de texto so diferenciados. Em SGBDs mais modernos como o MySQL e PostgreSQL, o esquema diferencia nveis de dados numricos, alm de representar outras caractersticas dos dados.

21

Na migrao do banco de dados, a elaborao do esquema torna-se um desafio importante, pois necessrio mapear os tipos de dados do banco de dados antigo para os tipos de dados do novo sistema de banco de dados. No necessrio que os tipos de dados tenham o mesmo nome, mas importante que eles tenham a mesma funo. Caso o mapeamento dos tipos de dados no seja feito corretamente na migrao do banco de dados, podem ocorrer resultados inesperados nas consultas. Pior ainda, pode ocorrer a danificao ou mesmo a perda dos dados. Diversas ferramentas voltadas migrao de bancos de dados esto disponveis atualmente no mercado, dentre as quais pode-se citar SwisSQL Data Migration Tool 5.0, da AdventNet, Full Convert, da Spectral Core e a DBConvert da DMSoft Technologies . As duas primeiras possuem verses do tipo trial, para utilizao por um determinado perodo de tempo com limitaes, a ltima no possui uma verso trial. A AdventNet SwisSQL prov uma ferramenta capaz de possibilitar a migrao de esquemas de bancos de dados e dados entre vrios bancos de dados como Oracle, IBM DB2, MS-SQL Server, Sybase, SAP DB, MySQL, PostgreSQL e MS Access. Executa a migrao garantindo a integridade dos dados livre de perdas e pode fazer a transferncia dos bancos de dados entre diferentes plataformas, como Windows, Linux e Unix. Migra stored procedures, funes e triggers se os SGBDs de origem e destino so os mesmos (ADVENTNET, 2008). A Spectral Core Full Convert uma ferramenta para plataforma Windows voltada migrao entre sistemas com um grande volume de dados. D suporte migrao de MS Access, dBase, FoxPro, Microsoft Excel, Interbase/Firebird, Lotus 1-2-3, MySQL, Oracle, PostgreSQL, Paradox, MS-SQL Server, arquivos em XML para MS-SQL Server, Oracle, PostgreSQL, MS Access, Interbase/Firebird. A migrao do esquema do banco inclui ndices e chaves estrangeiras e ocorre rapidamente, pois possui uma taxa de transferncia de vinte mil registros por segundo (SPECTRAL CORE, 2008). A DMSoft DBConvert possui diversas verses de sua ferramenta de migrao. Cada verso proveniente da combinao entre dois SGBDs. Os Sistemas suportados pela ferramenta so MS Access, MS SQL Server, MS FoxPro, MySQL, PostgreSQL, Oracle e IBM DB2. A ferramenta tambm faz migrao utilizando como fonte ou destino dos dados planilhas do MS Excel. As verses possibilitam migraes bidirecionais. Por exemplo, com a verso DBConvert for PostgreSQL & MySQL possvel realizar a migrao tanto do primeiro para o segundo quanto do segundo para o primeiro, assim como tambm possvel a migrao entre SGBDs iguais. Um diferencial desta ferramenta est na possibilidade da utilizao de filtros pr-estabelecidos para a migrao dos dados. A ferramenta opera nas 22

plataformas Windows Vista/XP/2000/NT. O registro da DBConvert for PostgreSQL & MySQL vendido por $69,00 no site do desenvolvedor (DMSOFT, 2008). Embora existam tantos benefcios proporcionados por essas ferramentas, nenhuma delas rene as caractersticas de migrar todos os objetos de um banco de dados e ser gratuita.

23

3. Modelagem da Ferramenta
Este captulo traz a descrio dos requisitos que serviram de base para a modelagem da ferramenta, assim como os diagramas de casos de uso e diagramas de classes que definem o projeto.

3.1.

Descrio dos Requisitos


Com base nas carncias das ferramentas de migrao existentes no mercado, foram

definidos os seguintes requisitos para a construo do DBMigrator: Requisitos Funcionais O sistema dever migrar mais de um esquema ao mesmo tempo. O sistema dever migrar tabelas, vises, ndices, chaves estrangeiras, funes e gatilhos. O sistema dar ao usurio a possibilidade de escolher quais tabelas e vises sero migradas. O sistema dever exibir o progresso das operaes. O sistema dever ter a opo de salvar um arquivo com os comandos de criao dos esquemas. O sistema dever ter a opo de salvar um arquivo com os comandos de insero dos dados dos esquemas migrados O sistema dever exibir um relatrio com o resumo do processo de migrao. O sistema dever ter a opo de salvar o relatrio com o resumo do processo de migrao. Requisitos no funcionais O sistema dever funcionar nas plataformas Linux e Windows.

3.2.

Diagrama de Casos de Uso


A anlise dos requisitos apresentados na seo anterior forneceu informaes para que

fossem identificados os casos de uso e o ator descritos no Apndice C. O diagrama de casos de uso exibido na Figura 1.

24

Figura 1: Diagrama de casos de uso.

3.3.

Diagrama de Classes
A fim de possibilitar uma melhor abstrao das classes do projeto, a Figura 2 traz uma

ilustrao do diagrama de classes sem mtodos e atributos. Esta organizao visa facilitar o entendimento da distribuio dos pacotes e dos relacionamentos entre as classes.

Figura 2: Diagrama de classes do pacote logical.

25

A figura 2 representa o pacote logical, onde esto definidas todas as classes responsveis pelo trabalho da migrao. A interface da ferramenta implementada pelas classes definidas no pacote view, ilustrado no diagrama de classes da Figura 3. Devido grande quantidade, os mtodos e atributos foram suprimidos do diagrama para uma melhor visualizao.

Figura 3: Diagrama de classes do pacote view.

26

4. Implementao da Ferramenta
O DBMigrator foi desenvolvido utilizando a linguagem de programao orientada a objetos Java. Os recursos desta linguagem foram explorados a fim de se obter uma arquitetura extensvel e de fcil manuteno. Os objetos responsveis pelo tratamento de cada SGBD esto encapsulados em mdulos. Assim, um suporte a um novo SGBD pode ser adicionado com a construo de um novo mdulo que implemente os mesmos comportamentos dos demais. O funcionamento do DBMigrator consiste basicamente em extrair os dados e metadados do MySQL em linguagem SQL, convert-los para a sintaxe do PostgreSQL e criar a nova verso do esquema migrado neste servidor. O trabalho maior fica por conta da converso dos comandos que feita separadamente para cada tipo de objeto do esquema de origem. O DBMigrator executa esta tarefa por meio de funes tradutoras que fazem uso de expresses regulares para a identificao de padres e substituio de cadeias de caracteres. As demais tarefas executadas pela ferramenta esto relacionadas com os mecanismos de interao com os SGBDs, viabilizados por drivers de conexo JDBC, e com as questes relativas interao com o usurio, a interface, cujo projeto descrito a seguir.

4.1.

Projeto da Interface com o usurio


Na definio do projeto da interface com o usurio, foi levado em considerao o fato

de o usurio da ferramenta ser um profissional da rea de informtica. Desta forma, evitou-se sobrecarregar a interface com informaes que no fossem essenciais utilizao do sistema. Tambm foi pensando em um perfil de usurio com experincia em computadores e, principalmente, em bancos de dados, que itens da interface foram projetados para dar ao usurio informao de como o sistema est trabalhando.

4.1.1. Diviso das Etapas do Processo de Migrao


Para simplificar o processo de migrao, este foi dividido em cinco etapas com possibilidade de navegao entre elas. Cada etapa do processo agrupa um conjunto de telas que viabilizam a execuo das operaes que compem aquela etapa. medida que o usurio solicita operaes do sistema, este executa essas operaes e mostra a tela seguinte no processo.

27

4.1.2. Acompanhamento do Progresso das Operaes


Para dar ao usurio a noo do que o sistema est fazendo durante as operaes mais demoradas, foram criadas telas de acompanhamento de progresso. Estas telas consistem de dois painis: um painel superior indica qual operao est sendo executada e informa quando esta foi concluda com xito ou com falha. Um painel inferior mostra detalhes sobre as operaes e, no caso de falha, aponta o motivo desta. Um exemplo pode ser observado na Figura 4.

Figura 4: Tela de acompanhamento de progresso.

A Figura 4 ilustra uma falha de conexo com o PostgreSQL aps a realizao das operaes de conexo com o MySQL e identificao dos esquemas. Tambm exibida a mensagem de erro emitida pelo dirver de conexo JDBC. As telas de acompanhamento de progresso fazem uso de threads para dar ao usurio informaes atualizadas. Desta forma, o progresso das operaes vai sendo exibido na medida em que estas vo sendo executadas.

28

4.1.3. Tratamento de Erros


Quando, no decorrer do processo de migrao, uma falha ocorre, esta tratada e uma mensagem exibida no painel inferior da tela de progresso. Esta mensagem a mesma emitida pelo driver de conexo com o SGBD. Internamente, todas as mensagens de falha de cada operao so armazenadas em listas para que possam ser calculadas as estatsticas que so exibidas em um relatrio no final do processo.

4.2.

Migrao dos Esquemas


Internamente, o DBMigrator executa a migrao dos esquemas seguindo trs etapas: a

extrao dos dados e metadados do servidor de origem, a converso da sintaxe das definies de esquema e dados do MySQL para a sintaxe do PostgreSQL e a transferncia do esquema convertido para o servidor de destino. A extrao do esquema a ser migrado do servidor de origem feita por meio do MySQLDump que recebe um conjunto de parmetros, muitos destes definidos pelo DBA atravs da interface do DBMigrator. A converso da sintaxe dos comandos em SQL do MySQL para a sintaxe dos comandos em SQL do PostgreSQL feita identificando cada tipo de objeto e dando a ele o tratamento necessrio. Por fim, a transferncia do esquema convertido para o PostgreSQL realizada atravs vrias queries (consultas) enviadas a este servidor.

4.2.1. O MySQLDump
O MySQLDump um utilitrio distribudo juntamente com o servidor MySQL e usado para extrair dados e metadados de bancos de dados deste servidor. Ele fornece uma srie de opes para gerao dos comandos de criao e insero, como, por exemplo, a opo de se escolherem quais objetos sero criados. O DBMigrator utiliza o MySQLDump para gerar um arquivo temporrio contendo as instrues de criao dos objetos que o DBA deseja migrar. Este arquivo tratado para que a sintaxe de seu contedo torne-se compatvel com o servidor PostgreSQL. Ao fim deste processo, o DBA tem um novo arquivo contendo as instrues de criao no formato do PostgreSQL e pode optar por utilizar o DBMigrator para criar os novos esquemas. Assim como para os comandos de criao, o DBMigrator tambm utiliza o arquivo gerado pelo MySQLDump para produzir os comandos de insero no formato do PostgreSQL. 29

O DBMigrator utiliza duas verses do MySQLDump: uma para plataforma Windows e outra para a plataforma Linux. O sistema, em tempo de execuo, identifica em qual plataforma est rodando e utiliza a verso correta do utilitrio.

4.2.2. Migrao de Tabelas e Vises


O DBMigrator, logo aps estabelecer conexes com os SGBDs de origem e destino, possibilita ao DBA escolher quais esquemas e objetos do MySQL sero migrados. Em seguida, duas listas so passadas como parmetros para o MySQLDump: uma contendo os nomes dos esquemas que sero migrados e outra contendo os nomes das tabelas e vises que no sero migradas. Desta forma, o MySQLDump gera um arquivo contendo comandos em SQL para a criao das tabelas e vises que o DBA deseja migrar. Com posse deste arquivo, o DBMigrator identifica cada comando de criao, faz a converso para a sintaxe do PostgreSQL e armazena os novos comandos em uma lista que ser utilizada posteriormente para executar os comandos diretamente no PostgreSQL e ou para criar um arquivo de texto contendo estes comandos. Durante a converso dos comandos de criao das tabelas, os tipos de dados do MySQL so identificados e substitudos por seus equivalentes no PostgreSQL. Esta equivalncia ilustrada na Tabela 3.

Tabela 3: Equivalncia de tipos de dados entre MySQL e PostgreSQL. Tipo de Dado do MySQL Tipo de Dado Equivalente no PostgreSQL tinyint blob smallint bytea A representao grfica destes tipos difere entre os SGBDs, mas seu propsito equivalente. datetime double longblob longtext mediumblob mediumtext timestamp double precision bytea text bytea text 30 Observao

mediumint tinyblob tinytext enum

integer bytea text character varying Esta equivalncia preserva os dados, mas no garante que os dados inseridos aps a migrao sejam elementos do tipo enum.

float

numeric

Os tipos de dados do MySQL que no constam na Tabela 3 possuem equivalentes com o mesmo nome no PostgreSQL, com exceo do tipo SET e dos tipos geomtricos que no possuem tipos equivalentes no PostgreSQL e que, por tal motivo, no podem ser migrados. Caso o usurio tente migrar uma tabela que utilize um tipo de dado que no possui equivalncia no PostgreSQL, o DBMigrator exibir a mensagem de erro emitida pelo driver de conexo JDBC. Uma comparao entre os comandos de criao de uma tabela provenientes do MySQLDump e do DBMigrator pode ser vista na Figura 5.

Figura 5: Comandos de criao de tabelas provenientes do MySQLDump e do DBMigrator.

Na Figura 5 pode-se observar que o DBMigrator adiciona ao nome da tabela o nome do esquema de destino. Este nome o mesmo nome do esquema migrado do MySQL. O DBMigrator tambm exclui a definio do tamanho dos tipos inteiros, pois esta no aceita 31

pela sintaxe do PostgreSQL. Outra alterao feita com relao ao valor default do tipo datetime do MySQL que foi substitudo pelo tipo timestamp do PostgreSQL. O PostgreSQL no considera o valor 0000-00-00 como um valor vlido para data, por isso este substitudo pelo valor 0000-01-01. A declarao KEY poll_id (poll_id) representa a criao de um ndice na sintaxe do MySQL, o que feito de maneira diferente no PostgreSQL e ser explicado na prxima seo.

4.2.3. Migrao de ndices


As definies de ndices, tal como constam nos arquivos gerados pelo MySQLDump, so feitas durante a criao da tabela que contm as colunas sobre as quais os ndices operam. Esta sintaxe no permitida no PostgreSQL, portanto o DBMigrator no s exclui as declaraes de criao de ndices no momento de criao das tabelas, como tambm armazena essas declaraes para convert-las para a sintaxe do PostgreSQL. Um comparativo entre os comandos de criao de ndices gerados pelo MySQLDump e pelo DBMigrator exemplificado na Figura 6.

Figura 6: Comparativo de criao de ndices no MySQLDump e no DBMigrator.

Na figura, o trecho selecionado representa o modo como o MySQLDump define ndices, obedecendo a sintaxe do MySQL. So criados trs ndices: idx_project_name,

32

idx_project_id e idx_project_view que operam sobre as colunas name, id e view_state, respectivamente. O MySQL permite que exista mais de um ndice com o mesmo nome dentro de um mesmo esquema, todavia isto no permitido no PostgreSQL. Para solucionar este problema, o DBMigrator adiciona ao nome do ndice o nome do esquema e o nome da tabela que possui a coluna sobre a qual o ndice opera. No exemplo, o ndice idx_project_name passou a se chamar test.mantis_project_table_idx_project_name.

4.2.4. Migrao de Chaves Estrangeiras


Assim como na definio dos ndices, as declaraes de criao de chaves estrangeiras do MySQLDump esto includas nas declaraes de criao das tabelas que possuem estas chaves. Para migrar uma chave estrangeira, o DBMigrator exclui a declarao desta gerada pelo MySQLDump da declarao da tabela. Neste momento, so armazenados o nome da tabela que possui a chave, o nome da chave, o nome da coluna que chave, o nome da tabela referenciada e o nome da coluna referenciada. Com posse dessas informaes, o DBMigrator gera um comando de alterao que adiciona a chave estrangeira tabela. Um comparativo da definio de chaves estrangeiras, tal como feito no MySQLDump e no DBMigrator exibido na Figura 7.

Figura 7: Comparativo de criao de chaves estrangeiras no MySQLDump e no DBMigrator.

A linha em destaque na figura mostra a maneira como o MySQLDump define uma restrio de chave estrangeira no MySQL.

33

4.2.5. Migrao de Funes


O MySQL, a partir da verso 5.0, passou a dar suporte a stored procedures e funes contendo instrues em SQL. A diferena bsica entre esses dois recursos est na sintaxe para suas definies e execues. Segundo a MySQL AB(2008), na definio de uma stored procedure no se especifica o tipo de dado retornado, pois esta no retorna dados. Por outro lado, na definio de funes em SQL no PostgreSQL, necessrio que se especifique o tipo de dado de retorno, mesmo que este seja do tipo void. Desta forma, o DBMigrator migra stored procedures do MySQL transformando-as em funes com tipo de retorno void no PostgreSQL. Restries para a definio de funes nos dois SGBDs, quando combinadas, implicaram em limitaes para a migrao destes objetos. Uma delas diz respeito sintaxe de definio de parmetros de uma funo. O MySQL permite que identificadores alfanumricos sejam utilizados como nomes de parmetros para funes que tambm podem ser utilizados no corpo da funo. J no PostgreSQL, os parmetros so referenciados no corpo da funo no formato $n, onde n um nmero inteiro e $1 se refere ao primeiro parmetro, $2 ao segundo, e assim por diante (THE POSTGRESQL GLOBAL DEVELOPMENT GROUP, 2008). Outra restrio do PostgreSQL para funes em SQL a obrigatoriedade de um comando SELECT como ltimo comando do corpo da funo, caso o tipo de retorno desta no seja void. A migrao de funes que recebem parmetros e de funes cujo tipo de retorno void e a ltima instruo no uma instruo do tipo SELECT no foi implementada, mesmo assim, o DBMigrator d suporte migrao das funes sem parmetros e que retornam o resultado de uma seleo cujo tipo de dado de retorno no seja um conjunto. A Figura 8 ilustra um comparativo da definio de funes geradas pelo MySQLDump e pelo DBMigrator. No comparativo, possvel observar a adio do nome do esquema test ao nome da funo. So substitudos o tipo de retorno pelo seu equivalente e a instruo RETURN por uma instruo SELECT. Na ltima linha do comando gerado pelo DBMigrator especificada a linguagem de definio da funo e sua volatilidade. Caso ocorra um erro durante a migrao da funo, em funo das restries descritas ou por qualquer outro motivo, o DBMigrator exibir a mensagem de erro emitida pelo driver de conexo.

34

Figura 8: Comparativo de criao de funes no MySQLDump e no DBMigrator.

4.2.6. Migrao de Gatilhos


Embora o propsito de gatilhos no MySQL e no PostgreSQL seja o mesmo, estes sistemas definem sintaxes diferentes para sua criao. O MySQL permite que no corpo da definio de um gatilho haja um comando em SQL, como um update ou um insert. O PostgreSQL, entretanto, exige que no corpo da definio de um gatilho haja apenas uma chamada a uma funo, como se v na Figura 9.

Figura 9: Sinopse da sintaxe de criao de um gatilho no PostgreSQL (THE POSTGRESQL GLOBAL DEVELOPMENT GROUP, 2008).

Outra exigncia do PostgreSQL diz respeito ao tipo de retorno da funo que chamada dentro da gatilho. O retorno da funo deve ser do tipo trigger que no possui um tipo equivalente no MySQL. Desta forma, puderam-se observar dois problemas relacionados migrao de gatilhos: a limitao de se migrar gatilhos cuja definio contivesse apenas uma chamada a um procedimento armazenado do MySQL, e o problema de se identificar tal procedimento, antes de sua migrao, para que fosse possvel alterar o seu tipo de retorno para o tipo trigger. Diante desses percalos, o estudo da viabilidade e das alternativas para a soluo do problema da migrao de gatilhos no DBMigrator foi definido como um trabalho futuro.

35

4.2.7. Gerao da DDL


Todos os comandos de criao dos objetos no DBMigrator so armazenados em listas, onde cada elemento da lista contm um comando. Estas listas so utilizadas para criao de um arquivo com a DDL do novo esquema do banco de dados. Quando o DBA opta por gerar a DDL, o DBMigrator percorre as listas escrevendo os comandos em um arquivo de texto. O DBMigrator d ao DBA a opo de selecionar o local onde deseja salvar este arquivo, o que pode ser observado na Figura 10.

Figura 10: Salvando os comandos de criao.

A maneira como o arquivo organizado permite que ele possa ser lido e seu contedo possa ser executado por uma ferramenta de gerenciamento de bancos de dados PostgreSQL como, por exemplo, o pgAdmin, aplicativo que acompanha o servidor.

4.3.

Migrao dos Dados


Quando o DBA seleciona quais tabelas deseja migrar, no incio do processo de

migrao, o DBMigrator utiliza o MySQLDump para gerar os comandos de insero de dados 36

para as tabelas selecionadas. Estes comandos passam ento por uma converso para a sintaxe do PostgreSQL. Nesta converso, acrescentado o nome do esquema de destino como prefixo da tabela e, em seguida, cada comando passa por uma filtragem para verificar a ocorrncia de inseres de dados binrios. Esta filtragem faz-se necessria pelo fato de os SGBDs oferecerem tratamentos diferentes para este tipo de dado.

4.3.1. Tratamento dos Tipos Binrios


Em funo da diferena na maneira de inserir dados binrios no MySQL e no PostgreSQL, o DBMigrator precisa identificar inseres desses tipos e realizar uma converso para que a integridade dos dados seja preservada. Os dados binrios provenientes do arquivo gerado pelo MySQLDump so identificados utilizando um casamento de padro e, posteriormente, o comando de insero alterado. Para entender como isto ocorre, faz-se necessria uma melhor explicao sobre o tratamento de tipos binrios no MySQL e no PostgreSQL.

4.3.1.1.

Tipos Binrios no MySQL

Os dados binrios no MySQL so armazenados em campos do tipo TINYBLOB, BLOB, MEDIUMBLOB e LONGBLOB que consistem em cadeias de bytes (MYSQL AB, 2008). Estas cadeias so convertidas para caracteres quando so gerados os comandos de insero pelo MySQLDump. Isto criou dificuldades para a insero dos tipos binrios no PostgreSQL, pois este no trata os tipos binrios como simples cadeias de caracteres.

4.3.1.2.

Tipos Binrios no PostgreSQL

A simples converso de bytes, oriundos de campos binrios, para caracteres, assim como feita pelo MySQLDump, propcia a erros, pois no existem caracteres equivalentes para todos os octetos, como no caso do octeto cujo valor decimal zero. Outros problemas tambm podem surgir, caso o octeto corresponda a um caractere invlido de acordo com o conjunto de caracteres da codificao selecionada para o banco de dados. Para evitar problemas como esses, o PostgreSQL utiliza um padro de entrada e sada de dados binrios que consiste em converter certos caracteres em uma seqncia de escape. Para construir esta seqncia, o PostgreSQL transforma o octeto em um nmero octal de trs dgitos equivalente ao valor decimal do octeto, e precedido por duas barras (THE POSTGRESQL GLOBAL DEVELOPMENT GROUP, 2008). 37

Embora essa alternativa tenha sido criada para os octetos cujos caracteres apresentam problemas de codificao, as seqncias de escape podem ser utilizadas para qualquer octeto.

4.3.1.3.

Soluo para a Equivalncia de Tipos Binrios

Como se pde ver, os dados binrios convertidos em cadeias de caracteres pelo MySQLDump no podem servir de base para a criao de comandos de insero na sintaxe do PostgreSQL, pois nem todos os octetos podem ser convertidos em caracteres entendveis por este servidor. Uma parte da soluo surgiu a partir de um recurso que foi adicionado ao MySQLDump distribudo com o MySQL a partir da verso 4.1. Este recurso permite que sejam criados comandos de insero nos quais os dados binrios vm convertidos no formato hexadecimal. Outra parte da soluo ficou por conta da funo decode do PostgreSQL. Esta funo recebe como parmetro uma cadeia binria em hexadecimal e converte-a para o formato de tipos binrios do PostgreSQL. Com a ajuda destes recursos, o trabalho do DBMigrator reduz-se a identificar o dado binrio fazendo casamento de padro, e substitu-lo por uma chamada funo decode, passando o dado em hexadecimal como parmetro. Para isto, os comandos so percorridos procura de dados que comecem por 0x, o padro para tipos binrios em hexadecimal no MySQL. A Figura 11 mostra o comando de insero do MySQLDump e o comando convertido pelo DBMigrator.

Figura 11: Comparativo de insero de dado binrio feita pelo MySQLDump e pelo DBMigrator.

38

Na Figura 11, o dado que inicia por 0xFF... foi substitudo pela chamada funo decode do PostgreSQL, onde o prprio dado foi passado como parmetro. O segundo parmetro da funo serve para indicar que o primeiro um valor em hexadecimal. Ainda na Figura 11, o dado 0x01 um valor do tipo bit que tambm vem convertido em hexadecimal pelo MySQLDump. O DBMigrator identifica o tipo de dado e converte o valor para 1.

4.3.2. Preservao da Integridade Referencial


Ao gerar os comandos de insero, o MySQLDump ignora a ordem de dependncias das tabelas no que diz respeito s chaves estrangeiras. Por isso, comum que no arquivo produzido por este utilitrio existam comandos de insero cujos dados referenciam dados que ainda no foram inseridos. A fim de preservar a integridade referencial, o PostgreSQL no permite operaes deste tipo. Para que no seja necessrio reorganizar a ordem dos comandos de insero, o DBMigrator exclui todas as constraints do esquema de destino e recria-as depois da insero dos dados. Deste modo, durante a insero, no surgem erros de violao de integridade referencial, pois o SGBD de destino no tem o trabalho de verificar a existncia dos dados referenciados, o que inclusive torna a insero mais rpida.

4.4.

Resumo do Processo de Migrao


No final do processo de migrao, o DBMigrator exibe um resumo que mostra os

nmeros de objetos migrados agrupados por objeto. Este clculo feito durante a migrao de cada objeto, quando so armazenados o nmero de objetos que se pretendeu migrar e o nmero de objetos que no foram migrados por motivo de falha.

39

5. Apresentao da Ferramenta
O DBMigrator foi projetado para dividir o processo de migrao em cinco etapas distintas: conexes, seleo dos objetos, criao dos esquemas, migrao dos dados e resumo do processo. A seguir, um exemplo de migrao que comea pela tela de incio do DBMigrator, ilustrada na Figura 12.

Figura 12: DBMigrator: Tela de Incio.

Logo na Tela de Incio, pode-se observar a presena de um menu situado no topo contendo as opes Arquivo e Ajuda. A opo Arquivo contm o boto Sair que encerra a execuo da ferramenta e a opo Ajuda contm o boto Dicas, que exibe informaes sobre bancos de dados que podem auxiliar a utilizao do DBMigrator, e o boto Sobre, que mostra informaes sobre a ferramenta. Do lado esquerdo da tela est o Mapa de Migrao, que tem como objetivo indicar em qual das cinco fases o processo de migrao se encontra. Na Tela de Incio, nenhum dos itens do mapa aparece em destaque, o que indica que o processo de migrao ainda no comeou. Tanto o menu superior quanto o Mapa de Migrao aparecem em todas as telas da ferramenta.

40

A Figura 13 mostra a tela que representa o incio da primeira fase do processo de migrao.

Figura 13: Tela de Conexes.

A primeira fase do processo de migrao a fase de conexes, o que indicado pelo item do Mapa de Migrao em destaque. Nesta tela, so definidos os parmetros para a realizao das conexes com os SGBDs de origem e destino, o MySQL e o PostgreSQL, respectivamente. Assim que todos os campos essenciais realizao das conexes so preenchidos, o boto Avanar habilitado e o usurio pode passar prxima tela, representada pela Figura 14. Na Tela de Progresso das Conexes, o DBMigrator mostra quais operaes esto sendo executadas naquele momento, identificando-as com um smbolo azul - quando executadas com sucesso ou com um smbolo vermelho, quando ocorre falha. Um rtulo exibe detalhes sobre a operao que est sendo executada no momento. Na figura, o rtulo exibiu a mensagem Execuo finalizada com sucesso!, indicando que a ltima operao ocorreu com sucesso. O boto detalhes abre um painel que traz informaes ainda mais detalhadas sobre as operaes que esto ocorrendo. Esta configurao se repete nas demais telas de progresso.

41

Figura 14: Tela de Progresso das Conexes.

No caso da Tela de Progresso de Conexes, o boto Avanar s habilitado se todas as operaes forem efetuadas com sucesso, ou seja, se o DBMigrator conseguir se conectar aos SGBDs, pois no possvel continuar o processo caso isso no ocorra. Quando o usurio clica no boto Avanar, surge uma nova tela que d incio segunda fase do processo de migrao: seleo dos objetos. Esta tela exibida na Figura 15. Na Tela de Seleo dos Esquemas so listados os esquemas presentes no servidor MySQL ao qual o DBMigrator se conectou. No exemplo, o usurio selecionou dois esquemas: igor2 e wilson. O boto Avanar desta tela s habilitado quando o usurio seleciona, no mnino, um esquema. Feito isso, pode-se passar prxima tela ilustrada na Figura 16. A Tela de Seleo dos Objetos foi projetada para que o usurio escolha quais objetos dos esquemas pr-selecionados ele deseja migrar. No quadro Objetos para Migrar so listadas as tabelas e vises dos esquemas pr-selecionados, ilustrando que estes objetos sero migrados. Caso o usurio opte por no migrar uma tabela ou viso, basta selecion-la na lista e transferi-la para o quadro Objetos Ignorados. Ainda nesta tela, o usurio pode optar por migrar ndices, chaves estrangeiras, funes e gatilhos.

42

Figura 15: Tela de Seleo dos Esquemas.

Figura 16: Tela de Seleo dos Objetos.

Ao clicar em Avanar, o usurio pode visualizar a prxima tela que inicia a fase de criao dos esquemas e exibida na Figura 17. 43

Figura 17: Tela de Criao da DDL.

A Tela de Criao da DDL ilustra o progresso das operaes de extrao da DDL do MySQL e de converso dos comandos de criao dos objetos. A primeira operao concebida internamente com o auxlio do MySQLDump que recebe parmetros baseados nas escolhas dos objetos que o usurio fez na etapa anterior. A segunda operao o momento em que o DBMigrator converte os comandos de criao gerados pelo MySQLDump para a sintaxe suportada pelo PostgreSQL. Ao avanar, o usurio visualiza a Tela de Opes de Criao, exibida na Figura 18. A Tela de Opes de Criao lista os bancos de dado presentes no servidor do PostgreSQL ao qual o DBMigrator est conectado. O usurio seleciona para qual banco de dados ele deseja migrar os esquemas provenientes do MySQL. Aps a seleo do banco de dados de destino, o usurio pode optar por criar os objetos on-line, ou seja, o DBMigrator cria os objetos, ou criar um arquivo de script com as instrues do tipo create, para utilizao em alguma outra ferramenta que execute os comandos em SQL. Quando clica em avanar, o usurio tem acesso Tela de Progresso da Migrao que ilustra o progresso das operaes de conexo com o banco de dados selecionado na etapa anterior e de criao dos novos esquemas, caso tenha optado pela opo Criar objetos Online. A Tela de Progresso da Migrao exibida na Figura 19.

44

Figura 18: Tela de Opes de Criao.

Figura 19: Tela de Progresso da Migrao.

45

A tela que sucede a Tela de Progresso da Migrao a Tela de Opes de Insero que d incio fase de migrao dos dados. Esta a fase em que os dados so inseridos no servidor de destino. A Tela de Opes de Insero exibida na Figura 20.

Figura 20: Tela de Opes de Insero.

Na tela ilustrada na Figura 20, o usurio define como quer migrar os dados, podendo escolher entre as opes de migrar os dados on-line e ou criar um arquivo de script com as instrues do tipo insert em SQL. Clicando em avanar, o usurio visualiza o progresso das operaes referentes transferncia dos dados, o que ilustrado pela Figura 21. Na Tela de Progresso da Transferncia dos Dados o usurio acompanha o andamento da extrao das instrues de insero do MySQL, da converso destas instrues e da insero dos dados. Esta ltima operao pode demorar alguns minutos, dependendo da quantidade de dados que est sendo inserida no banco de dados de destino. Ao final desta operao, o boto avanar habilitado e o usurio pode visualizar a Tela de Resumo, exibida na Figura 22. Na Tela de Resumo, exibido um relatrio do processo de migrao contendo um pequeno resumo da quantidade de objetos migrados, agrupados por objeto. Ao clicar no boto salvar, o usurio pode definir um lugar para salvar este relatrio. Esta tela marca o fim do processo de migrao.

46

Figura 21: Tela de Progresso da Transferncia dos Dados.

Figura 22: Tela de Resumo.

47

6. Concluso
O cenrio atual ainda carece de ferramentas gratuitas que executem o trabalho da migrao de bancos de dados, incluindo todos os tipos de objetos e dados. O DBMigrator vem suprir parcialmente esta carncia no que diz respeito migrao de bancos de dados do MySQL para o PostgreSQL, por se tratar de uma alternativa gratuita, segura e eficiente para a migrao de bancos de dados daquele para este. A ferramenta rene um conjunto de funcionalidades que permite ao usurio migrar esquemas contendo tabelas, vises, ndices, restries, funes e stored procedures. Outras caractersticas incluem a migrao de mais de um esquema simultaneamente, e a migrao de dados, incluindo tipos de dados complexos como os tipos binrios, cujas sintaxes de definio utilizadas pelos dois SGBDs diferem completamente. A arquitetura do sistema permite uma fcil extenso, devido sua organizao modular, de forma que a adio de suporte a outros SGBDs pode ser sugerida como um trabalho futuro. Tambm como trabalho futuro, sugere-se a implementao da migrao de gatilhos, para que a ferramenta possa ento dar suporte migrao de todos os tipos de objetos de um banco de dados MySQL.

48

7. Referncias
ELMASRI, Ramez; NAVATHE, Shamkant B.. Sistemas de banco de dados. So Paulo: Pearson Addison Wesley, 2005.

SILBERSCHATZ, Abraham; KORTH, Henry F.; SUDARSHAN, S.. Sistema de banco de dados. 3. ed. So Paulo: Pearson Education do Brasil, 1999.

MASLAKOWSKI, Mark. Aprenda MySQL em 21 dias. Rio de Janeiro: Campus, 2000.

MYSQL AB. Manual de Referncia do MySQL 4.1. Reviso 221. Disponvel em: <http://downloads.mysql.com/docs/refman-4.1-pt.html-chapter.zip>. Acesso em: 30 maio 2008.

THE POSTGRESQL GLOBAL DEVELOPMENT GROUP. Documentao do PostgreSQL 8.0.0. Disponvel em: <http://pgdocptbr.sourceforge.net/pg80/index.html>. Acesso em: 27 maio 2008.

STERN

SOFTWARE.

Migrao

de

Bancos

de

Dados.

Disponvel

em:

<http://www.stern.com.br/suporte/documentos/MigracaodeBancosdeDados.pdf>. Acesso em: 10 jun. 2008.

ADVENTNET.

SwisSQL

Comparsion&Synchronization.

Disponvel

em:

<http://www.swissql.com/>. Acesso em: 25 maio 2008.

SPECTRAL CORE. Advanced database conversion and migration. Disponvel em: <http://www.spectralcore.com/fullconvert/index.php>. Acesso em: 20 jun. 2008.

DMSOFT.

DBConvert

for

MySQL

&

PostgreSQL.

Disponvel

em:

<http://dbconvert.com/convert-mysql-to-postgresql-pro.php>. Acesso em: 20 jun. 2008.

MCLAUGHLIN, Brett; POLLICE, Gary; WEST, David. Anlise e Projeto Orientado ao Objeto. Rio de Janeiro: Alta Books, 2007. 442 p.

49

GUEDES, Gelleanes T. A.. UML: Uma Abordagem Prtica. 3. ed. So Paulo: Novatec, 2008.

DEITEL, Harvey M.; DEITEL, Paul J.. Java: Como Programar. 4. ed. Porto Alegre: Bookman, 2002.

50

Apndice A Tipos de Dados do MySQL


Tabela 1: Tipos de dados do MySQL.

Nome TINYINT[(M)][UNSIGNED]

Descrio Um inteiro muito pequeno cuja faixa com sinal vai de -128 at 127 e a faixa sem sinal vai de 0 at 255.

BIT BOOL BOOLEAN SMALLINT[(M)][UNSIGNED]

Sinnimo para TINYINT(1). Sinnimo para TINYINT(1). Sinnimo para TINYINT(1). Um inteiro pequeno cuja faixa com sinal vai de -32768 at 32767 e a faixa sem sinal vai de 0 at 65535.

MEDIUMINT[(M)][UNSIGNED]

Um inteiro de tamanho mdio cuja faixa com sinal vai de -8388608 at 8388607 e a faixa sem sinal vai de 0 at 16777215.

INT[(M)][UNSIGNED]

Um inteiro de tamanho normal cuja faixa com sinal vai de -2147483648 at 2147483648 e a faixa sem sinal vai de 0 at 4294967295.

INTEGER[(M)][UNSIGNED] BIGINT[(M)][UNSIGNED]

Um sinnimo para INT. Um inteiro grande cuja faixa com sinal vai de 9223372036854775808 at 9223372036854775807 e a faixa sem sinal vai de 0 at 18446744073709551615.

FLOAT[P]

Um nmero de ponto flutuante. P tem de ser menor ou igual a 24 para um nmero de ponto flutuante de preciso simples e entre 25 e 53 para um numero de ponto flutuante de preciso dupla.

FLOAT[(M,D)][UNSIGNED]

Um nmero de ponto flutuante pequeno (de preciso simples) cujos valores permitidos esto entre 3.402823466E+38 1.175494351E-38

e -1.175494351E-38, 0 e entre e
3.402823466E+38. O M

representa a largura do display e o D define o nmero de casas decimais.

DOUBLE[(M,D)][UNSIGNED]

Um nmero de ponto flutuante de tamanho normal (dupla preciso) cujos valores permitidos esto entre 51

1.7976931348623157E+308 2.2250738585072014E-308, 2.2250738585072014E-308 1.7976931348623157E+308. O M 0

e e

entre e

representa

largura do display e o D define o nmero de casas decimais.

DOUBLE PRECISION [(M, D)] Um sinnimo para DOUBLE. [UNSIGNED] REAL[(M, D)] [UNSIGNED] DECIMAL[(M[,D])] [UNSIGNED] Um sinnimo para DOUBLE. Um nmero de ponto flutuante que se comporta como um CHAR. Isto significa que o nmero armazenado como uma string. Se D igual a 0, os valores no tero ponto decimal ou parte fracionria. Caso M e D no sejam definidos, sero assumidos os valores padro: 10 e 0 respectivamente. DEC[(M[,D])] [UNSIGNED] Um sinnimo para DECIMAL.

NUMERIC[(M[,D])][UNSIGNED] Um sinnimo para DECIMAL. FIXED[(M[,D])] [UNSIGNED] DATE Um sinnimo para DECIMAL. Uma data de calendrio. A faixa suportada est entre 1000-01-01' e '9999-12-31. Os valores so
exibidos no formato AAAA-MM-DD e strings podem ser utilizadas alm de nmeros.

DATETIME

Data e hora. A faixa suportada est entre 1000-01-01


00:00:00

e 9999-12-31 23:59:59. Os valores


podem ser utilizadas alm de

so exibidos no formato AAAA-MM-DD HH:MM:SS e strings

nmeros.

TIMESTAMP[(M)]

Um timestamp cuja faixa suportada est entre 197001-01 00:00:00

e algum momento no ano 2037. O

modo de exibio dos valores varia de acordo com os valores de M que podem ser 14, 12, 8 ou 6 e correspondem a YYYY-MM-DD HH:MM:SS, YY-MM-DD
HH:MM:SS,

YYYY-MM-DD
Se M

e omitido

YY-MM-DD
o valor

respectivamente.

padro 14 assumido.

52

TIME

Uma hora. A faixa de valores suportada est entre 838:59:59

e 838:59:59. Os valores so exibidos

no formato HH:MM:SS. YEAR[(2 | 4)] Define um ano no formato de 2 ou 4 dgitos, sendo que 4 o valor padro. A faixa de valores vai de 1901 at
2155

no formato de 4 dgitos, e de 1970 at 2069 no

formato de 2 dgitos (70-69). Os valores so exibidos no formato YYYY e YY. CHAR(M) Uma string de tamanho fixo M. Caso o contedo da string seja menor que M, a string completada com espaos em branco at o tamanho M. Os valores de M podem variar de 1 at 255. Se o valor de M especificado for maior que 255, o tipo da coluna convertido para TEXT. NATIONAL CHAR(M) Similar ao CHAR e utiliza o conjunto de caracteres padro. VARCHAR(M) Uma string de tamanho varivel. Os valores de M podem variar de 1 at 255. Espaos extras so removidos quando o caractere armazenado. Caso M seja maior que 255, o tipo da coluna convertido para TEXT. TINYBLOB Um campo BLOB com tamanho mximo de 255 caracteres. TINYTEXT Um campo TEXT com tamanho mximo de 255 caracteres. BLOB Um objeto binrio com tamanho mximo de 65535 caracteres. TEXT Corresponde ao tipo BLOB. A nica diferena que para o tipo TEXT a comparao e ordenao no so realizadas no modo caso-sensitivo. MEDIUMBLOB Um campo BLOB com tamanho mximo de 16777215 caracteres. MEDIUMTEXT Um campo TEXT com tamanho mximo de 16777215 53

caracteres. LONGBLOB Um campo BLOB com tamanho mximo de

4294967295 caracteres. LONGTEXT Um campo TEXT com tamanho mximo de

4294967295 caracteres. ENUM(valor1, valor2, ...) Armazena um nico objeto string proveniente da lista (valor1, valor2,..., NULL), ou o valor especial de erro . A lista de valores do tipo ENUM pode conter no mximo 65535 elementos diferentes. SET(valor1, valor2, ...) Representa um conjunto. Um objeto string que pode conter zero ou mais valores provenientes da lista (valor1, valor2,...). Um SET pode ter at 64 membros.

54

Apndice B Tipos de Dados do PostgreSQL


Tabela 2: Tipos de dados do PostgreSQL 8.0.

Nome bigint bigserial

Aliases int8 serial8

Descrio Inteiro de oito bytes com sinal. Inteiro de oito bytes com autoincremento.

bit[ (n) ]

Cadeia de bits de comprimento fixo.

bit varying[ (n) ]

varbit

Cadeia de bits de comprimento varivel.

boolean Box bytea

bool

Booleano lgico. Caixa retangular no plano. Dados bytes). binrios (matriz de

charcter varying[ (n) ]

varchar[ (n) ]

Cadeia

de

caracteres

de

comprimento varivel. charcter[ (n) ] char[ (n) ] Cadeia de caracteres de

comprimento fixo. Cidr circle Date Endereo de rede IPv4 ou IPv6. Crculo no plano. Data de calendrio (ano, ms, dia). double precision float8 Nmero de ponto flutuante de preciso dupla. Inet Endereo de hospedeiro IPv4 e IPv6. integer int, int4 Inteiro de quarto bytes com sinal. interval[ (p) ] Line Lseg macaddr money Espao de tempo. Linha infinita no plano. Segmento de linha no plano. Endereo MAC. Quantia monetria. 55

numeric[(p),(s)]

decimal[(p),(s)]

Numrico exato com preciso selecionvel.

path point polygon

Caminho geomtrico no plano. Ponto geomtrico no plano. Caminho geomtrico fechado no plano.

Real

float4

Nmero de ponto flutuante de preciso simples.

smallint serial

int2 serial4

Inteiro de dois bytes com sinal. Inteiro de quatro bytes com auto-incremento.

Text

Cadeia

de

caracteres

de

comprimento varivel. time[ (p) ] without time zone time[ (p) ] with time zone timez Hora do dia. Hora do dia, incluindo a zona horria. timestamp[ (p) ] without time zone timestamp[ (p) ] with time timestampz zone Data e hora, incluindo a zona horria. Data de hora.

56

Apndice C - Documentao dos Casos de Uso


Migrar Banco de Dados UC01 Sumrio: O administrador de banco de dados usa o sistema para migrar um banco de dados do MySQL para o PostgreSQL.

Ator Primrio: Administrador de banco de dados DBA.

Precondies: Os SGBDs de origem e destino devem estar executando e aceitando conexes.

Fluxo Principal 1. O DBA fornece as informaes para realizar as conexes nos SGBDs e avana. 2. O Sistema mostra o progresso das operaes de conexo e de identificao dos esquemas do MySQL. 3. O DBA confere o progresso das operaes e avana. 4. O sistema exibe uma lista com os nomes dos esquemas do MySQL. 5. O DBA seleciona quais esquemas deseja migrar e avana. 6. O sistema exibe uma lista com os nomes dos objetos dos esquemas selecionados. 7. O DBA seleciona quais objetos deseja migrar e ainda opta por migrar ndices, chaves estrangeiras, funes e gatilhos e avana. 8. O sistema mostra o progresso das operaes de extrao da DDL do MySQL e de converso da DDL no formato do PostgreSQL. 9. O DBA confere o progresso das operaes e avana. 10. O Sistema exibe uma lista com os nomes dos bancos de dados do PostgreSQL e exibe tambm as opes de criao do(s) esquema(s). 11. O DBA seleciona o banco de dados de destino e avana. 12. O sistema exibe o progresso das operaes de conexo com o banco selecionado e de criao do(s) novo(s) esquema(s) no PostgreSQL. 13. O DBA confere o progresso das operaes e avana. 14. O sistema exibe uma tela com as opes de insero de dados. 15. O DBA avana.

57

16. O sistema mostra o progresso das operaes de extrao dos comandos de insero do MySQL, de converso da sintaxe destes comandos, e de insero dos dados no(s) esquema(s) do PostgreSQL. 17. O DBA confere o progresso das operaes e avana. 18. O sistema exibe um relatrio com um resumo do processo de migrao e o caso de uso termina.

Fluxo de Exceo (2): Falha durante a conexo a. O sistema no consegue se conectar com o(s) SGBD(s) e exibe o motivo da falha. b. O DBA volta etapa anterior, tenta corrigir a falha e avana.

58

Salvar DDL no Formato do PostgreSQL UC02 Sumrio: O administrador de banco de dados usa o sistema para gravar um arquivo de texto contendo a DDL do(s) esquema(s) do MySQL, previamente selecionados, convertida para a sintaxe do PostgreSQL.

Ator Primrio: Administrador de banco de dados DBA.

Precondies: Estar na etapa n. 10 do caso de uso UC01.

Fluxo Principal 1. O DBA solicita a criao de um arquivo com os comandos de insero. 2. O sistema habilita a escolha de diretrio. 3. O DBA define o nome do arquivo, seleciona o diretrio onde deseja salv-lo e avana. 4. O Sistema cria o arquivo no local selecionado e o caso de uso termina.

59

Salvar Comandos de Insero no Formato do PostgreSQL UC03 Sumrio: O administrador de banco de dados usa o sistema para gravar um arquivo de texto contendo os comandos de insero dos registros das tabelas do MySQL, previamente selecionadas, convertidos para a sintaxe do PostgreSQL.

Ator Primrio: Administrador de banco de dados DBA.

Precondies: Estar na etapa n. 14 do caso de uso UC01.

Fluxo Principal 5. O DBA solicita a criao de um arquivo com a DDL. 6. O sistema habilita a escolha de diretrio. 7. O DBA define o nome do arquivo, seleciona o diretrio onde deseja salv-lo e avana. 8. O Sistema cria o arquivo no local selecionado e o caso de uso termina.

60

Salvar Relatrio Contendo Resumo da Migrao UC04 Sumrio: O administrador de banco de dados usa o sistema para gravar um arquivo de texto contendo um relatrio com um resumo do processo de migrao.

Ator Primrio: Administrador de banco de dados DBA.

Precondies: Estar na etapa n. 18 do caso de uso UC01.

Fluxo Principal 9. O DBA solicita a criao de um arquivo com o relatrio. 10. O sistema habilita a escolha de diretrio. 11. O DBA define o nome do arquivo, seleciona o diretrio onde deseja e clica em salvar. 12. O Sistema cria o arquivo no local selecionado e o caso de uso termina.

61