Análise Comparativa de Sistemas de Controle de Versões com foco em Versionamento de Banco de Dados Oracle Giovanni Vieira Bento, Lorraine Cassiano, Hélio Rubens Soares, Sônia Aparecida Santana Centro Universitário do Triângulo (UNITRI) Avenida Nicomedes Alves dos Santos – 38.411-106 – Uberlândia – MG – Brasil {giovannistill,lorrainecassiano,sonia.ap.santana}@gmail.com, [email protected] Abstract. In corporate management models are imposed with a view to ensuring the integrity of the database before sharing information. Among the models will be highlighted in this article version control with the aim of comparing two tools, Version Control - Object (CVO) and Git, exposing the importance of appropriate mechanisms to establish and compose combinations of versions. The results show that when it comes to versioning database, the CVO stands out positively. Resumo. Em ambientes corporativos são impostos modelos de gerenciamento com intuito de assegurar a integridade da base de dados perante o compartilhamento das informações. Dentre os modelos, será evidenciado neste artigo o controle de versão com o objetivo de comparar duas ferramentas, Controle de Versão - Objeto (CVO) e Git, expondo a importância dos mecanismos adequados para estabelecer e compor combinações de versões. Os resultados apontam que se tratando de versionamento de banco de dados, o CVO se destaca positivamente. 1. Introdução Algumas aplicações corporativas demandam da necessidade de acesso concorrente às informações mantidas em seu banco de dados. Por exemplo, o desenvolvimento da parte de análise de crédito do cliente em uma empresa de telecomunicação pode ser dividido entre vários membros de uma equipe, onde cada membro deve desenvolver uma parte do objeto de banco ou interface do sistema. Assim, um mesmo plano de informação (PI) do banco de dados (BD) seria atualizado por vários usuários de forma simultânea. Com isso, um sistema de BD deve oferecer mecanismos que garantam a consistência do banco quando vários usuários leem e alteram os dados de forma concorrente. Quando um banco de dados é versionado resolve-se parte de um problema, pois assim não se perde as estruturas do banco, bem como a lógica de negócios encontrada nas triggers, functions e procedures. No entanto, a utilização das ferramentas auxiliadoras no controle de versão não substitui o papel do DBA (Data Base Administrator). A ideia é que elas contribuam com melhorias na qualidade e eficiência do trabalho de cada um. Diante destas situações, este artigo tem como objetivo analisar as principais funcionalidades apresentadas pelas ferramentas CVO e Git, sendo que essa análise pode ajudar na escolha e tornar uma opção de ferramenta em projetos de softwares envolvendo banco de dados. Na seção 2 foi feita uma revisão bibliográfica contendo conceitos de tipos de versionamento de banco de dados e um pouco sobre cada ferramenta. Na seção 3 foram feitos testes que originaram um comparativo, utilizando critérios criados pelo RUP (Rational Unified Process) para a escolha de ferramentas de suporte ao desenvolvimento de softwares. Os resultados mostraram que se tratando de versionamento de banco de dados, o CVO se destaca positivamente demonstrado na seção 4. Finalmente, na seção 5 serão apresentadas as conclusões obtidas ao final deste artigo. 2. Base Conceitual Há tempos os Bancos de Dados (BDs) não são tratados apenas como um repositório. As organizações vêm criando aplicações que têm vários pontos em BDs. Ao olhar o desenvolvimento dos softwares, percebe-se a utilização de práticas e ferramentas de versionamento, o que na maioria das vezes não acontece com o banco de dados, podendo ser por motivos, por exemplo, culturais. Empresas trabalham divididas em equipes, onde o analista de desenvolvimento não faz parte do mesmo grupo que o analista de banco de dados, em alguns casos, cada um trabalhando em um paradigma diferente. De acordo com Prado (2006) Muitos SCVs (Sistemas de Controle de Versões) têm sido desenvolvidos para gerenciar o histórico das versões de software e atividades humanas associadas com a intenção de produzir software de maior qualidade e suportar trabalho em equipe. Estes sistemas de versionamento servem também para equipes que possuem apenas uma pessoa, pois a documentação dos códigos fonte de um software contribui para entrega de um sistema de maior qualidade. 2.1. Versionamento de Esquemas O usuário é quem define como será a versão do esquema, ou seja, não basta alterar os dados ou o próprio esquema para que uma nova versão seja definida. O Sistema de Gerenciamento de Banco de Dados (SGBD) deve ser capaz de acessar os dados em qualquer versão. Para alterar os dados de um esquema é necessário saber qual o tipo de versionamento foi adotado. Se for o versionamento parcial, somente serão alterados os dados da versão atual. Caso tenha sido o total, qualquer uma das versões do banco poderá ter seus dados alterados (RODRIGUES, 2011). 2.1.1 Versionamento em Banco de Dados Orientado a Objetos (BDOO) Pinheiro (2012) aponta O gerenciamento de versão em um banco de dados orientados a objeto consiste em ferramentas e construções que automatizam ou simplificam a construção e a organização de versões ou configurações. Sem essas ferramentas, caberia ao usuário organizar e manter as versões. Podem ocorrer situações em determinados sistemas em que seja fundamental o uso de uma versão anterior e por isso a utilidade de armazenála. Ao versionar um objeto ocorre mudanças tanto na estrutura quanto no estado. Cria-se um tipo de raiz que aponta para todas as versões e é fundamental manter a versão atual assim que o objeto for modificado (CARVALHO, 2011). 2.1.2. Versionamento em Banco de Dados Geográficos (BDGeo) O versionamento em BDGeo trata da representação do mesmo em cópias lógicas de algumas tabelas sobre uma determinada visão ou por um período de tempo, ou seja, não ocorre a duplicação dos dados. Em caso de conflito entre duas versões, gera-se outra representação dos dados contendo as propriedades daqueles conflitantes, mostrando com isso que não há interferência entre elas. O progresso do BDGeo é representado pela estrutura lista, onde uma versão deriva de outra e possui apenas uma sucessora. Cada versão que possui mais de uma sucessora é representada pela estrutura de árvore e se, além disso, possuir mais de uma predecessora é representado pelos grafos (BARBOSA, 2008). 2.1.3 Versionamento de dados em bancos de dados relacionais Para realizar o controle de versão em banco de dados relacionais depende das camadas, ou seja, divisões do BD fragmentadas em motor de banco de dados – parte do SGBD que é o elo entre os programas do SGBD e os dados (THOMÉ, 2011). Procedimentos de usuários armazenados no BD que interceptam as requisições de atualização ou a camada que fica a cargo do programador da aplicação. Nos casos em que o versionamento é feito junto ao motor de banco dados não é exigido alteração no esquema. Nas demais, é necessário adicionar colunas e/ou tabelas contendo metadados referentes aos versionamento. Metadados que de acordo com Lourenço (2007), “são habitualmente definidos simplesmente como dados descrevendo outros dados”. Para esses casos são três práticas usadas: esquema único, espelhamento e tabela polimórfica. Esquema único é o nome dado à categoria onde se altera o esquema de cada tabela adicionando uma coluna com o controle de versão dela e modificando a chave primária para conter também essa nova coluna de controle. O espelhamento faz uma cópia da tabela original com uma coluna a mais para armazenar a versão, a essa cópia dá-se o nome de espelho e então os dados são alterados na tabela original. Na tabela polimórfica, cria-se apenas uma tabela, chamada de tabela de versões, para armazenar todas as tabelas versionadas (DUARTE, 2012). 2.2. Git Durante a criação do sistema operacional Kernel Linux, Linus Torvalds, criador do Kernel Linux, observou a necessidade de criar uma ferramenta open source que pudesse realizar o controle de versões dos códigos fontes de diversos projetos incluindo códigos de banco de dados. Assim surge o Git Version, uma aplicação distribuída capaz de versionar projetos com velocidade e eficiência. Dentre as características do Git, existe o suporte para desenvolvimento linear, ou seja, uma metodologia de programação onde são alteradas partes distintas do sistema ao mesmo tempo com o intuito de mesclá-las ao final do processo (SILVERIO, 2013). O Git contém uma forma diferente dos demais sistemas de controle de versão para manipular os dados. A cada mudança de um projeto versionado pelo Git, é realizado um snapshot (tirada uma foto) dos objetos armazenados. Por exemplo, se em algum arquivo não houve alteração, o sistema não armazena o arquivo novamente, apenas acrescenta um “link” para o objeto anterior idêntico ao armazenado anteriormente. Já os outros sistemas de controle de versão tratam as mudanças feitas nos dados ao longo do tempo como um conjunto de arquivos (MARTINHO; MUNIZ, 2013). Inicialmente o Git armazena o conteúdo em arquivos com extensão “sha”, para que possa gerar um número de revisão do arquivo. Tipo de valor que é utilizado na identificação interna simplificados em outros dois tipos, loose objects e packed objects. Os arquivos do tipo loose objects são mais simples e armazenados no disco num único arquivo. Os packed objects são mais sofisticados e cada versão é armazenada em objetos separados (ZANATTA; SANTOS, 2012). Trabalhando em modo terminal o Git pode ser considerado um pouco complicado no início, porém com tempo de experiência a configuração se torna mais fácil e simples. O arquivo .gitconfig armazena as configurações gerais do sistema Git. Este arquivo fica armazenado no diretório home do usuário que está realizando as configurações. Existem duas formas de configuração, de forma mais simples utilizando o comando git config que realiza as configurações automáticas, ou da maneira mais complexa que é alterando o arquivo de configuração manualmente. Dentro dos critérios de utilização básica do Git existem os comandos de instalação, iniciação e manipulação de repositório, modificações e clonagem de um repositório remoto. Pelo terminal, entrar na pasta do projeto a ser iniciado e utilizar o comando $ git init. Este comando cria um diretório invisível, contento todos os arquivos necessários para o repositório. Para adicionar arquivos em um projeto no repositório utilizar o comando $ git add. E para visualizar o status daquilo que foi incluído no projeto deve-se executar o comando $ git status conforme Figura 1. Feito estes procedimentos resta o comando de $ git commit, assim é enviada uma alteração para o Sistema Git (CHACON, 2009). Figura 1 - Utilizando o Git Bash 2.3. Controle de Versão – Objeto A CVO é uma aplicação que foi desenvolvida em linguagem Delphi com banco de dados Oracle. O intuito do aplicativo é buscar com agilidade backup do código dos objetos sem a necessidade de fazer o restore do banco utilizando o aplicativo RMAN – ou Recovery Manager. Sendo assim, de acordo com Rezende (2011) o RMAN serve para “auxiliar os DBAs nas tarefas do diaa-dia referente à execução de cópias de segurança dos arquivos do banco de dados garantindo assim a recuperabilidade do banco de dados em caso de falha”. O que custaria demanda de tempo e espaço em disco. 2.3.1. Banco de Dados versionado com CVO (Controle de Versionamento – Objeto) O DBA recebe uma planilha contendo os nomes dos objetos a serem atualizados no ambiente de Produção informando o sistema desta atualização. Antes disso, é feita de forma manual o controle dos conflitos. A equipe de qualidade realiza em cada objeto uma comparação da versão que foi homologada com a versão que está em produção. Caso tenha na primeira um projeto que não será atualizado, é guardando um backup do mesmo e então uma nova versão compilada no ambiente de homologação contendo apenas o projeto que será atualizado. Nos testes de regressão realizado no ambiente de pré-produção é garantido que nenhum projeto que não deverá ser atualizado esteja ainda no ambiente, bem como se a retirada do mesmo impactou em algum projeto que será então atualizado. Baseado nessas informações, utilizando o CVO, o DBA seleciona o sistema e o ambiente a ser atualizado. Os objetos são importados na ferramenta e automaticamente é informado se os objetos existem ou não no ambiente de origem e destino. Caso o objeto não existir no sistema de origem o sistema não habilita o botão “Gerar DDL”. O sistema “Controle de Versão – Objeto” cria automaticamente o diretório onde o arquivo e o backup da DDL são gravados, conforme Figura 1. Exemplo: em destaque no caminho a seguir demonstra a data corrente (diamês-ano_hora/minuto). Exemplo: “\\filebkp\suporte$\GBD\OMU\OMU_2013\VANTIVE\OMU_SIMULADO_15-05-2013_1004”. Ao término da geração da DDL o aplicativo executa automaticamente a rotina de atualização dos arquivos gerados no sistema subversion, conforme mostrado também na Figura 2. O subversion permite a recuperação de todas as versões dos dados guardados em arquivos e/ou diretórios, além de uma visualização de todo o histórico de alterações (SUSSMAN et al., 2007). Com a gravação do backup no subversion é possível ter o controle de recuperação garantido, pois em caso de alguma falha basta executar os backups garantindo assim que o BD fique estável como antes do inicio da atualização. Após os objetos gravados no subversion, selecionando a DDL gerada utilizando uma ferramenta de desenvolvimento Oracle opcional, o DBA executa a atualização dos objetos no ambiente de destino. Como a tarefa é realizada apenas por um DBA, não é possível haver uma mesma versão conflitando com outra, além do que toda versão de um mesmo objeto terá a data da atualização como diferencial entre as versões, com isso o CVO não precisa se gerenciar as transações. Diretório e arquivo DDL Subversion Figura 2 - Arquivo DDL e Subversion É válido ressaltar que o controle de concorrência dos objetos a serem atualizados é feito de forma pessimista no ambiente de desenvolvimento, ou seja, os analistas avisam aos outros, através de um grupo de email, sobre a alteração de um determinado objeto por um período de tempo. Com isso o objeto só ficará disponível para outro, quando o termino do prazo chegar. A ferramenta possui a funcionalidade de pesquisa de versões de objetos filtrando a busca por nome de objeto ou pela data de atualização. No resultado são disponibilizados os diretórios do subversion onde estão salvas as DDLs das versões anteriores dos objetos filtrados, conforme Figura 3. Com isso, é possível ter acesso a qualquer versão de qualquer objeto, garantindo o retorno do ambiente a qualquer ponto anterior, em caso de necessidade. Pesquisar Ambiente Digitar o que pesquisa Sistema Resultado Pesquisar Diretório Figura 3 - Funcionalidade de Pesquisa 3. Comparação entre os Sistemas CVO e Git Para o estudo de caso serão considerados dois ambientes: desenvolvimento (CRMDBASE) e produção (CRMPBASE). No ambiente de desenvolvimento são criados os objetos de banco, desenvolvidas as regras de negócio e se necessário à alteração de códigos existentes. Produção é o ambiente final. Conforme a Figura 4 ilustra a migração dos objetos de ambiente para ambiente. CRMDBASE CRMPBASE Figura 4 - Migração de Ambiente A Análise comparativa feita neste artigo utilizando o CVO e o Git se justifica, pois ambos foram adquiridos gratuitamente, apresentam qualidade; e também por terem peculiaridades que garantem um melhor controle de versão, como por exemplo: o emprego de um repositório centralizado e da técnica de copy-modify-merge, onde a cada modificação seguida de um commit, tornam disponíveis instantaneamente para os usuários as informações, simplificando assim a maneira de realizar o controle de versões (CARNEIRO, 2007). A forma como é realizado o histórico de versões no repositório é uma característica que diferente as ferramentas. O Git considera os dados como um conjunto de versões de um pequeno sistema de arquivos. Após salvar ou realizar um commit no projeto, o Git realiza uma espécie de fotografia dos arquivos e guarda uma referência dessa foto. Caso não ocorra nenhuma modificação apenas uma referência é criada para a versão anterior, não sendo preciso sofrer nenhuma alteração (BORGES, 2012). Já no CVO as informações de alterações são armazenadas em uma lista por arquivo, ou seja, mantém o que não foi alterado como um conjunto de arquivos mais as alterações feitas a cada arquivo ao longo do tempo. 3.1. Definição dos critérios de comparação Conforme a Tabela 1 os critérios adotados foram baseados em uma das atividades apontadas pelo RUP 1 para a fase de iniciação do projeto, a qual presume selecionar e adquirir ferramentas de suporte necessário ao desenvolvimento do projeto. Tabela 1 – Definições dos critérios utilizados na análise Critérios Descrição Características e funções A funcionalidade fornecida pela ferramenta. Integração com Oracle O grau de integração com o banco de dados Oracle. Aplicabilidade No processo de desenvolvimento até onde oferece suporte. Extensibilidade Possibilidade de configurar e personalizar. Suporte a equipe Possibilidade de dar suporte a uma equipe de 1 http://www.wthreex.com/rup/portugues/index.htm usuários que está em espaços diferentes. Usabilidade Facilidade em usar e aprender. Maturidade Nível de maturidade. Mesmo com boa reputação, algumas empresas não investiriam em uma versão 1.0 Suporte a configurações Suporte para instalar, configurar e usar a ferramenta. Treinamento Treinamento disponível. Através de avaliações comparativas de modelos aplicados pela gerência de configuração em projeto de softwares, Cia (2006) e Oliveira et al. (2006), definiram e utilizaram alguns itens da Tabela 2 para o método características e funções. Tabela 2 – Definições das características e funções comparadas Características e Descrição funções Commit atômico Ou realiza todas as atualizações ou nenhuma. Diferença de arquivos Controle de arquivos em diferentes formatos. Mudanças Informar qual item está em alteração por alguém da equipe. Permissões Cada integrante da equipe pode ter permissões diferenciadas. Suporte Perceber diferentes versões de arquivos que constituem uma distribuição e recuperar a mesma. 4. Apresentação e Análise dos Resultados Os testes de instalação e utilização das ferramentas foram realizados em ambientes Linux e Windows. A documentação mostra que o Git também é compatível com Mac OS X e Solaris. Nos testes de merge, ambas as ferramentas possuem tal funcionalidade. Já a renomeação dos arquivos o Git, ao contrário do CVO, permite a renomeação dos arquivos. Para os testes das ferramentas foram configurados os sistemas CVO e Git em um mesmo servidor que tem como sistema operacional Red Hat Enterprise Linux Server release 5.8 (64-bit) e os clientes em ambientes Windows e uma Máquina Virtual com o Oracle Linux conforme a Figura 6 e 7, ambos com o banco de dados Oracle 11g instalado e configurado. Figura 5 - CVO no Windows (esquerda) e CVO no Linux (direita) Figura 6 - Git no Linux (esquerda) e Git no Linux (direita) Através da aplicação PL-SQL Developer foi desenvolvido o projeto de banco de dados contendo objetos como, procedures, packages, functions. Conforme ilustra a Figura 9, a criação do objeto FC_BUSCA_PARAMETRO. Figura 7 – Objeto do banco FC_BUSCA_PARAMETRO Nos testes realizados a Figura 10 mostra que o CVO cria no repositório, automaticamente, por meio de um clique do botão da interface, o arquivo que contém os códigos fonte dos objetos do banco de dados. Figura 8 - Criando repositório no CVO Já o Git necessita da extração dos objetos para um arquivo no diretório local e através de comandos nativos da aplicação, as alterações são submetidas por meio de um comando (git commit). O CVO grava as modificações, porém o armazenamento somente é realizado caso não haja nenhuma ocorrência ou falha durante a gravação dos dados, garantindo a atomicidade do commit conforme ilustra a Figura 11. Enquanto o CVO armazena apenas as DDLs extraídas dos objetos em formato .sql, o Git armazena esse tipo de formato e outros como: imagens, músicas, textos, etc. A Figura 12 ilustra os arquivos quanto ao âmbito de mudanças, as duas ferramentas demonstram eficiência; ficam gravadas no servidor todas as operações de commit e check-out realizados durante o teste. Desta forma o gestor do projeto consegue monitorar quem, quando e o que foi modificado. Figura 9 - Comando git commit Figura 10 - Histórico de Objetos no Git Já o controle de acesso pode ser definido com perfis temporários, gerenciá-los com o sistema de permissão de arquivos do sistema operacional que o seu servidor roda, isso no Git. Se o acesso for liberado ao CVO, o usuário é capaz de realizar tanto leitura quanto escrita. Com relação ao suporte, ambos disponibilizam ao usuário a identificação das versões para realizar a recuperação no repositório. A comparação das características e funções realizada na Tabela 3, o Git apresentou um melhor resultado, atendendo a quase todos os itens analisados. Tabela 3 – Comparativo do método: características e funções Características e CVO Git Funções Commit atômico Possui Não Possui Diferença de arquivos Não Possui Possui Mudanças Não Possui Possui Permissões Não Possui Possui Suporte Possui Não possui A integração com o banco de dados Oracle também não apresenta problemas. Contudo o CVO possibilitou uma melhor aplicabilidade no processo de localização dos objetos do BD, através da interface de consulta. Figura 11 - Interface de consulta de Objeto Por apresentarem características próprias, a extensibilidade não é aplicada por eles, contudo ambos disponibilizam seus códigos fontes para que seja possível o usuário oferecer sua contribuição de melhora. Aplicando as características de cliente/servidor, os testes apontaram que ambos funcionam neste tipo de ambiente, assim pode-se trabalhar com uma equipe geograficamente distribuída. Mesmo o Git possuindo configurações em linha de comando, os dois sistemas apresentam boa usabilidade aplicados ao banco de dados Oracle, porém o CVO é o candidato mais forte em questão de interface com o usuário e se adéqua exclusivamente ao versionamento de banco de dados. Analisando as versões (CVO 2.0 e Git 1.8.3), deduz uma maturidade para uso de ambas. Ambos possuem disponibilizados para suporte e configurações, documentos necessários que possibilitam a utilização de suas funções. Nenhuma das ferramentas oferece treinamento, porém é possível encontrar tutoriais na internet do Git e o criador da ferramenta CVO também disponibiliza o tutorial da mesma para quem necessitar de seu uso. A comparação realizada na Tabela 4 demonstra que o CVO atende um pouco mais os critérios adotados. Apesar de atender parcialmente ao método características e funções, que é de suma importância para um bom desempenho do sistema em projetos de software, o CVO atende totalmente ao método Integração com Oracle, que para o foco do artigo de versionamento em banco de dados é o mais adequado. Tabela 4 – Comparativo dos critérios estabelecidos Critérios CVO Git Integração com Oracle Atende totalmente Atende parcialmente Aplicabilidade Atende totalmente Atende totalmente Extensibilidade Não Atende Não Atende Suporte a equipe Atende totalmente Atende totalmente Usabilidade Atende totalmente Atende parcialmente Maturidade Atende totalmente Atende totalmente Suporte a Configurações Atende totalmente Atende totalmente Treinamento Não atende Não atende 5. Conclusão O controle de versão é de suma importância para o monitoramento das alterações feitas nos projetos. Realizar o controle de versão do banco de dados faz com que aplicação e banco caminhem lado a lado para garantir a qualidade do projeto. Os objetos dessa pesquisa, CVO e Git, possuem qualidade e eficácia na proposta de realizar o controle de versão de banco de dados. A comparação feita neste artigo foi baseada nos ensinamentos definidos pelo RUP, com o objetivo de validar quais itens cada ferramenta contribuiria para um melhor controle de versão ser feito com qualidade. Através desse artigo foi possível observar que o CVO apresentou uma pequena vantagem no que diz respeito à usabilidade e a integração com o Oracle, ou seja, em se tratando de controle de versão de banco de dados seria a melhor opção. Como as ferramentas estão em constante desenvolvimento pode ser que a falta de recursos ou falha nos mesmos sejam solucionadas e adaptadas. As percepções obtidas neste artigo com o uso da ferramenta Git podem ser complementadas com trabalhos futuros que possibilitem uma comparação com o desenvolvimento de uma interface que se integre ao Git, assim como o CVO faz a integração com o subversion, já que a pesquisa apenas utilizou o Git a partir de fontes já gerados por outras ferramentas. Outra proposta é o desenvolvimento de um módulo para controle de versão das tabelas e seus dados. Referências BARBOSA, Leandro Rodrigues. Integração entre sistema de informação geográfica e sistema de projeto de redes de distribuição. São Paulo 2008. Disponível na internet. http://www.teses.usp.br/teses/disponiveis/3/3143/tde30052008-140230/pt-br.php. 20 de maio de 2013. BORGES, Marcos Eduardo. Introdução ao Git – Conceitos básicos. São Paulo 2012. Disponível na internet. http://www.borges-solutions.com/introducao-aogit-conceitos-basicos/. 28 de julho de 2013. CARNEIRO, Adriano Nântua. Um guia para controle de versão de Projeto de Software. Pernambuco 2007. Disponível na internet. http://tcc.ecomp.poli.br/20072/Adriano%20N%C3%A2ntua.pdf. 29 de julho de 2013. CARVALHO, Guilherme Cantuária de. Sistema de Banco de Dados Orientados a Objetos. São Paulo 2011. Disponível na internet. http://www.fatecsp.br/dti/tcc/tcc0002.pdf. 11 de abril de 2013. CHACON, Scott. Pro Git - The entire Pro Git book. New York 2009. Disponível na internet. https://github.s3.amazonaws.com/media/progit.en.pdf. 28 de julho de 2013. CIA, Thaís Miranda. Modelo de avaliação do processo de gerência de configuração de software. São Carlos 2006. Disponível na internet. http://www.teses.usp.br/teses/disponiveis/55/55134/tde-24082006163201/pt-br.php. 22 de julho de 2013. DUARTE, Gustavo Luiz. Metadados para reconciliação de transações em banco de dados autônomos. São Paulo 2012. Disponível na internet. http://www.teses.usp.br/teses/disponiveis/45/45134/tde-27082012153008/pt-br.php. 18 de abril de 2013. LOURENÇO, Cíntia de Azevedo. Metadados Digitais: revisão bibliográfica da evolução e tendências por meio de categorias funcionais. Belo Horizonte 2007. Disponível na internet. http://cintialourenco.eci.ufmg.br/downloads/466986-1-PB.pdf. 08 de agosto de 2013. MARTINHO, Marcus, MUNIZ, Elson. GIT SCM: Sistema de Controle de Versionamento Distribuído. Manaus 2013. Disponível na internet. http://www.tjam.jus.br/index.php?option=com_content&view=article&id=4032 %3Agit-scm-sistema-de-controle-de-versionamentodistribuido&catid=344%3Asds-artigos-cientificos-etecnologicos&Itemid=455&showall=1. 28 de julho de 2013. OLIVEIRA, Susana Brunoro C., TANAKA, Astério K., VIANNA, Dalessandro S. Avaliação de ferramentas para controle automatizado de versões de artefatos de requisitos de software. Rio de Janeiro 2006. Disponível na internet. http://wer.inf.pucrio.br/WERpapers/pdf_counter.lua?wer=WER06&file_name=susana_oliveira. pdf. 25 de julho de 2013. PINHEIRO, Marcel Borges. Banco De Dados. Cuiabá - Mato Grosso 2012. Disponível na Internet. http://www.trabalhosfeitos.com/ensaios/Banco-DeDados/416047.html. Acessado em 20 de maio de 2013. PRADO, Lucio Moratelli. Visualization of Version Control Information. Florianópolis 2006. Disponível na internet. https://projetos.inf.ufsc.br/arquivos_projetos/projeto_546/resumo2.doc. 17 de abril de 2013. REZENDE, Ricardo. Automatizando um backup com RMAN - Parte 2. Revista SQL Magazine. Edição 85 - 2011. RODRIGUES, Renan Bet. XVERSIONING - Uma Ferramenta para versionamento de esquemas XML. Joinville 2011. Disponível na internet. http://www.pergamum.udesc.br/dadosbu/000000/000000000012/000012D9.pdf. 17 de maio de 2013. SILVERIO, Henrique. Introdução ao controle de versões com Git. São Paulo 2013. Disponível na internet. http://blog.henriquesilverio.com/gitgithub/introducao-ao-controle-de-versao-com-git/. 29 de Julho de 2013. SUSSMAN, Ben Collins, FITZPATRICK, Brian W, PILATO, C. Michael. Controle de Versão com Subversion. California, USA - 2007. Disponível na internet. http://svnbook-pt-br.googlecode.com/svn/snapshots/1.4/svn.intro.whatis.html. 16 de maio de 2013. THOMÉ, Luciana Ferraz. Introdução a banco de dados. Rio de Janeiro 2011. Disponível na internet. www.ic.uff.br/~ferraz/BDI/BD/Bd98_11.doc. 08 de agosto de 2013. ZANATTA, Bruno, SANTOS, Gustavo Alexandre Sousa. Comparando os sistemas de controle de versão distribuídos Git e Mercurial. Revista Engenharia de Software Magazine. Edição 54 – 2012.