A partir desse post da série Banco de Dados Evolutivo vamos entender e aprender como automatizar a maior parte do trabalho de controle de versionamento de banco de dados.
Existem várias ferramentas que ajudam essa tarefa, entretanto, veremos a partir de agora como implementar esses conceitos de banco de dados evolutivo abordados nos posts Parte 1, Parte 2 e Parte 3 usando a ferramenta Liquibase.
O LiquiBase é uma ferramenta de versionamento open source em Java criada para gerenciar as mudanças de banco de dados. Ao invés de o desenvolvedor escrever o SQL diretamente no banco de dados para criar, atualizar ou descartar objetos, essas definições são escritas em arquivos XML. Esse arquivo XML é denominado changelog que, por sua vez contém vários changesets que nada mais são que cada uma das alterações de banco. Na Listagem 1 e 2 constam um exemplo da estrutura do changelog e changeset respectivamente.
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-2.0.xsd http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd"> </databaseChangeLog>
Listagem 1. Estrutura do arquivo de ChangeLog da ferramenta de versionamento de banco de dados LiquiBase.
<changeSet author="arthur" id="apresentacao_liquibase"> <createTable tableName="datas_light"> <column name="id" type="int"/> <column name="nome" type="varchar(255)"/> </createTable> </changeSet>
Listagem 2. Estrutura do arquivo de ChangeSet da ferramenta de versionamento de banco de dados LiquiBase.
O funcionamento da ferramenta é bem simples. O LiquiBase cria no banco de dados a ser versionado duas tabelas de controle: databasechangelog e databasechangeloglock. Essas tabelas serão geradas no primeiro comando que você executar através da ferramenta. Na tabela databasechangelog o Liquibase guarda as informações de changesets aplicadas na base de dados sendo que o XML de alteração é identificado por uma chave composta formada por id e autor. Já a tabela databasechangeloglock serve para não permitir que dois usuários apliquem alterações simultâneas na mesma base de dados.
As mudanças são feitas em arquivos XML (como já foi dito) e são executados através de comandos via DOS (Windows) ou Terminal (Linux). Os principais comandos são de:
- Update – Usado para os comandos de criação, alteração ou descarte de objetos;
- Rollback – Usado para desfazer uma alteração executada na base de dados;
- Diff – Usado para verificar o que há de diferente entre duas bases de dados;
- SQL Output – Usado para transformar os changelogfiles XML em arquivos SQL;
Com relação às refatorações o LiquiBase possui inúmeras possibilidades que vão de comandos simples como um create ou drop database até comandos complexos como lookup table e merge columns.
No próximo post iniciaremos a preparação de um ambiente de testes para que seja possível usufruímos do potencial da ferramenta de versionamento na base de dados Adventure Works.
Para se ler o conteúdo completo desta série – Banco de Dados Evolutivo – Parte 1, Banco de Dados Evolutivo – Parte 2 e Banco de Dados Evolutivo – Parte 3.
Pingback: Banco de Dados Evolutivo – Parte 5 | Arthur Luz | Data's Light
Pingback: Banco de Dados Evolutivo – Parte 6 | Arthur Luz | Data's Light
Pingback: Banco de Dados Evolutivo – Parte 7 | Arthur Luz | Data's Light
Pingback: Banco de Dados Evolutivo – Parte 8 | Arthur Luz | Data's Light
Pingback: Banco de Dados Evolutivo – Parte 11 | Arthur Luz | Data's Light
Pingback: Banco de Dados Evolutivo – Parte 12 | Arthur Luz | Data's Light
Pingback: Banco de Dados Evolutivo – Parte 14 | Arthur Luz | Data's Light