Banco de Dados Evolutivo – Parte 11

Nesse post da série Banco de Dados Evolutivo você aprenderá a executar a bundled change mergeColumn, bem como a execução do SQL Output através do comando updateSQL que é responsável por transformar as refatorações criadas em XML para comandos SQL (veja mais sobre cada um dos comandos na Parte 4 da série).


Você fará nesse momento do seu aprendizado algo um pouco mais complicado. Temos na tabela Person.Person duas colunas contendo o primeiro e último nome das pessoas que possuem alguma ligação com a Adventure Works. Essas colunas tem por nome: FirstName e LastName (tenho conhecimento da coluna MiddleName. Para fins de aprendizado esqueça essa coluna e trabalhe como se o nome das pessoas da Adventure Works fosse formado somente pelo seu primeiro e ultimo nome).

Você terá agora a missão de unir os dados dessas duas colunas em uma única coluna denominada FullName. Para que seja possível executar essa modificação use a refatoração de nome mergeColumns. Ao executar o comando, as colunas FirstName e LastName serão excluídas, passando a existir somente a nova coluna FullName.

Como você ja deve ter percebido, para que isso seja possível será preciso criar mais um arquivo XML usando o código da Listagem 1. Esse arquivo terá por nome changelog_4.xml.

 <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">

 <changeSet author="arthur" id="mergeColumns-nome_sobrenome">
  		<mergeColumns column1Name="FirstName"
           	 column2Name="LastName"
            	finalColumnName="FullName"
            	finalColumnType="varchar(255)"
            	joinString=" "
                schemaName="Person"
            	tableName="Person"/>
 </changeSet>

 </databaseChangeLog>

Listagem 1. Comando usado dentro do arquivo changelog_4.xml para criar a coluna FullName na tabela Person.Person da base de dados AdventureWorks_Homolog e, por sua vez, excluir as colunas FirstName e LastName.

Você adicionará a tag de execução dessa nova alteração dentro do arquivo master_1.0.xml segundo a Listagem 2.

<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">

<include file="C:/changelog/versao_1.0/changelog_2.xml" />
<include file="C:/changelog/versao_1.0/changelog_3.xml" />
<include file="C:/changelog/versao_1.0/changelog_4.xml" />

</databaseChangeLog>

Listagem 2. Comando usado dentro do arquivo master_1.0.xml para incluir a execução da nova refatoração changelog_4.xml.

Agora, antes de executar a nova alteração na base de homologação você aprenderá um outro comando de extrema importância da ferramenta Liquibase. O SQL OUTPUT.

O comando SQL Output – updateSQL

         O comando SQL OUTPUT, como já foi dito na Parte 4 da série, é responsável por transformar os changesets em comandos SQL ANSI. Ele é executado através do código updateSQL. Dessa forma, é possível para o Administrador de Banco de Dados ou Administrador de Dados analisar de forma mais visual a alteração que está prestes a ser executada no database.

É muito importante saber que você precisa transformar o arquivo XML em SQL antes de executá-lo pois, depois de estar registrado dentro da tabela de controle databasechangelog, não será mais possível gerar o SQL do arquivo.

Para que seja possível visualizar a alteração em um documento SQL, basta que você utilize o comando da Listagem 3 no cmd (lembre-se sempre de executar os comandos Liquibase dentro da pasta raiz do sistema).

java -jar C:/liquibase-3.0.8-bin/liquibase.jar --driver=com.microsoft.sqlserver.jdbc.SQLServerDriver --classpath=C:\liquibase-3.0.8-bin\sqljdbc4.jar --url=jdbc:sqlserver://localhost:1433;databaseName=AdventureWorks_Homolog --username=<usuario> --password=<senha> --changeLogFile=C:\changelog\versao_1.0\changelog_4.xml updateSQL > C:\changelog\versao_1.0\changelog_4.sql

Listagem 3. Comando usado para gerar o arquivo changelog_4.sql. Esse arquivo será salvo na pasta C:\changelog\versao_1.0.

Observe que não usamos o arquivo liquibaseHomolog.properties pois o mesmo guarda os dados do arquivo master.xml. Para gerar o arquivo SQL você precisa partir do arquivo XML que possui as informações de changesets.

Abra o arquivo SQL gerado e você o verá tal qual a Figura 1.

Captura de Tela 2015-07-15 às 03.43.35
Figura 1. Arquivo changelog_4.sql gerado com o comando updateSQL a partir do arquivo changelog_4.xml.

É possível executar o comando updateSQL em qualquer arquivo de refatoração XML antes de sua execução.

Bundled change mergeColumns – Continuação

Para que seja possível um melhor entendimento do comando mergeColumns criado no XML mais a cima vou explicar abaixo o significado de cada um dos atributos do arquivo:

  • Os atributos column1Name e column2Name nada mais são que a primeira e a segunda coluna a serem unidas.
  • Os atributos finalColumnName e finalColumnType servem para nomear a nova coluna que será gerada e determinar o seu tipo de dado respectivamente.
  • O atributo joinString serve para determinar o que você quer colocar (caso queira) entre os dados das duas colunas. No nosso caso, foi colocado um espaço em branco pois não queremos os que o nome e sobrenome do cliente se torne um só.
  • O atributo tableName nada mais é que o nome da tabela em que a alteração será executada.

Antes de você executar o comando update será preciso excluir o index IX_Person_LastName_FirstName_MiddleName das bases de dados AdventureWorks_Homolog e AdventureWorks_Prod através do código SQL da Listagem 4 (seria possível executar essa alteração em um changeset separado através da bundled change de nome dropIndex – saiba mais aqui. Mas a intenção aqui é que você aprenda a usabilidade da ferramenta, por isso, vamos direto ao ponto).

USE [AdventureWorks_Homolog]
GO

DROP INDEX [IX_Person_LastName_FirstName_MiddleName]
ON [Person].[Person]
GO
USE [AdventureWorks_Prod]
GO

DROP INDEX [IX_Person_LastName_FirstName_MiddleName]
ON [Person].[Person]
GO

Listagem 4. Comando usado para excluir o index IX_Person_LastName_FirstName_MiddleName das bases de Homologação e Produção para que seja possível continuar os testes com a ferramenta de versionamento Liquibase.

Agora, execute o comando da Listagem 5 para finalizar a alteração.

java -jar C:\liquibase-3.0.8-bin\liquibase.jar --defaultsFile=C:\liquibase-3.0.8-bin\liquibaseHomolog.properties update

Listagem 5. Comando usado no cmd para execução do comando UPDATE através do Liquibase.

Execute um SELECT na tabela Person.Person terá um retorno conforme a Figura 2.

Captura de Tela 2015-07-15 às 04.02.32
Figura 2. Retorno da tabela Person.Person após adição da coluna FullName.

No próximo post da série você aprenderá a versionar a sua base de dados e a executar um outro delicado e importante comando da ferramenta de versionamento de banco de dados Liquibase, o DIFF database.

Anúncios

Um comentário sobre “Banco de Dados Evolutivo – Parte 11

  1. Pingback: Banco de Dados Evolutivo – Parte 12 | Arthur Luz | Data's Light

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s