SlideShare a Scribd company logo
1 of 30
Gestión de Cambios
de BDD con LiquiBase


                ISC – Abril 2012
              Paulo Clavijo Esteban
              clavijo_pau@ingenieriadesoftware.com


                                               1
Agenda

 Contexto
 La problemática del cambio
 ¿Qué es LiquiBase?
 Características principales de LiquiBase
 ¿Cómo es la gestión con LiquiBase?
 Primeros Pasos
 Rolling Back de Cambios
 Buenas Prácticas
 Acciones de Refactoring disponibles
 Integración con Maven



                                  ISC - 2012
                             Paulo Clavijo Esteban
                       clavijo_pau@ingenieriadesoftware.com   2
Contexto



           ¿Si nunca desarrollamos código sin un control de versiones,
           por que desarrollamos la BDD sin el?




                                     ISC - 2012
                                Paulo Clavijo Esteban
                          clavijo_pau@ingenieriadesoftware.com           3
La problemática del cambio (1/3)

  Las BDD son una parte fundamental en la mayoría de los proyectos.

  ¿Como realizamos el seguimiento de sus cambios?

  Necesitamos:
    Soportar múltiples desarrolladores.

     Soportar ramas y versiones.

     Flexibilizar y automatizar como
     se aplican los cambios.



                                     ISC - 2012
                                Paulo Clavijo Esteban
                          clavijo_pau@ingenieriadesoftware.com    4
La problemática del cambio (2/3)

  Antes de LiquiBase
    Ejecución manual de cambios en el modelo de BDD.
    No podíamos garantizar que una BDD se encontrase en
    una versión concreta.
    Nos era demasiado costoso revertir la BDD a estados
    anteriores.
    No podíamos garantizar la sincronía entre el modelo de
    datos y el modelo de entidades de la aplicación.
    Generación manual de documentación sobre el modelo de
    datos.
    Las incorporaciones de un nuevo miembro al equipo eran
    mas costosas.


                                 ISC - 2012
                            Paulo Clavijo Esteban
                      clavijo_pau@ingenieriadesoftware.com   5
La problemática del cambio (3/3)


     Soluciones?




                                   6
¿Qué es LiquiBase? (1/3)

  LiquiBase es una librería OpenSource (bajo licencia Apache
  2.0), independiente de la base de datos, que nos permitirá
  realizar el seguimiento, la gestión y aplicación de cambios en
  nuestro modelo de datos.




  Database Refactoring
      Database Change Management


                                    ISC - 2012
                               Paulo Clavijo Esteban
                         clavijo_pau@ingenieriadesoftware.com      7
¿Qué es LiquiBase? (2/3)

  Permite aplicar cambios de una forma controlada y
  automatizada así como llevar un histórico de los
  mismos.
  Pensada especialmente para equipos de desarrollo
  ágiles, con múltiples desarrolladores y ramas de código.




                                   ISC - 2012
                              Paulo Clavijo Esteban
                        clavijo_pau@ingenieriadesoftware.com   8
¿Qué es LiquiBase? (3/3)

  Una de las ideas es conseguir que los refactoring o nuevos
  desarrollos de código subidos a SVN/CVS, se acompañen del
  refactoring del modelo de BDD, es decir subir también los
  changesets LiquiBase.

  De esta forma cuando el resto de desarrolladores actualicen,
  descargaran código y las modificaciones de BDD necesarias para
  que este funcione.

  Se puede conseguir que aplicar estos cambios sea casi
  transparente para los desarrolladores, ya que LiquiBase puede
  utilizarse no solo desde una linea de comandos, si no también
  mediante tareas Ant o mediante Maven.


                                     ISC - 2012
                                Paulo Clavijo Esteban
                          clavijo_pau@ingenieriadesoftware.com     9
Entorno Desarrollo




                                ISC - 2012
                           Paulo Clavijo Esteban
                     clavijo_pau@ingenieriadesoftware.com   10
Características principales de LiquiBase

  LiquiBase soporta:
     Extensiones
     Fusionar (merge) cambios de múltiples desarrolladores
     Ramificaciones de código
     Múltiples Bases de Datos
     Gestionar datos en producción como también en varias etapas de
     testeo y desarrollo
     Cluster-safe database upgrades
     Actualizaciones automáticas o generación de scripts SQL que pueden
     ser aprobadas y aplicadas por un DBA
     Deshacer actualizaciones
     Revisar diferencias entre versiones ("diff"s)
     Generar logs de cambios iniciales desde bases de datos existentes
     Generación de documentación de cambios de bases de datos

                                      ISC - 2012
                                 Paulo Clavijo Esteban
                           clavijo_pau@ingenieriadesoftware.com       11
¿Cómo es la gestión con LiquiBase? (1/4)

  No es una herramienta “diff”.
  Trabaja de forma diferente a los tradicionales herramientas de
  versionado de esquemas.
  Almacena una lista de los cambios aplicados.




                                   ISC - 2012
                              Paulo Clavijo Esteban
                        clavijo_pau@ingenieriadesoftware.com   12
¿Cómo es la gestión con LiquiBase? (2/4)

  LiquiBase utiliza ficheros XML para describir los cambios
  (changesets), lo que permite independencia del sistema de
  BDD utilizado. Un changeset se identifica por su id y author,
  así como por el propio nombre del fichero.

  Cuando aplicamos un changeset, LiquiBase a parte de realizar
  las modificaciones pertinentes, registra una entrada con el
  cambio en su tabla de histórico DatabaseChangeLog. De
  hecho, antes de aplicar un changeset, se comprueba con
  dicha tabla que este no se ha realizado previamente.




                                    ISC - 2012
                               Paulo Clavijo Esteban
                         clavijo_pau@ingenieriadesoftware.com     13
¿Cómo es la gestión con LiquiBase? (3/4)

  LiquiBase utiliza dos tablas:

     databasechangelock
     Utilizada para controlar la concurrencia.

     databasechangelog
     Para el registro de cambios aplicados.




                                      ISC - 2012
                                 Paulo Clavijo Esteban
                           clavijo_pau@ingenieriadesoftware.com   14
¿Cómo es la gestión con LiquiBase? (4/4)

  Ya que todos los cambios en la base de datos son almacenados en
  un formato legible para los humanos (changesets), permite también
  su seguimiento y control el sistema de control de versiones.

  Podemos utilizar LiquiBase directamente como una herramienta de
  comandos, o configurarla como un plugin de Ant o de Maven.




                                    ISC - 2012
                               Paulo Clavijo Esteban
                         clavijo_pau@ingenieriadesoftware.com       15
Primeros pasos con LiquiBase (1/4)

  1º – Definir el fichero Changelog
 db.changelog.xml
 <?xml version="1.0" encoding="UTF­8"?>
  
 <databaseChangeLog
   xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema­instance"
   xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
          http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog­2.0.xsd">
  
 </databaseChangeLog>




En este fichero es donde indicamos todos los cambios o Changesets.




                                                  ISC - 2012
                                             Paulo Clavijo Esteban
                                       clavijo_pau@ingenieriadesoftware.com   16
Primeros pasos con LiquiBase (2/4)

  2º - Definir un Changeset.
 db.changelog.xml
 <?xml version="1.0" encoding="UTF­8"?>
  
 <databaseChangeLog
   xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema­instance"
   xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
          http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog­2.0.xsd">

     <changeSet id="1" author="pau">
         <createTable tableName="producto">
             <column name="id" type="int">
                 <constraints primaryKey="true" nullable="false"/>
             </column>
             <column name="nombre" type="varchar(50)">
                 <constraints nullable="false"/>
             </column>
             <column name="precio" type="double" />
             <column name="baja" type="boolean" defaultValueBoolean="false"/>
         </createTable>
     </changeSet>
  
 </databaseChangeLog>



                                                  ISC - 2012
                                             Paulo Clavijo Esteban
                                       clavijo_pau@ingenieriadesoftware.com     17
Primeros pasos con LiquiBase (3/4)

  3º – Aplicar el Changeset
    Podemos ejecutar el Changeset de varias formas: mediante
    linea de comandos, Ant, Maven, Grails, etc.
    Por ejemplo desde linea de comandos contra una BDD
    MySql.
          java ­jar liquibase.jar ­­driver=com.mysql.jdbc.Driver 
               ­­classpath=lib/mysql.jar 
               ­­changeLogFile=db.changelog.xml 
               ­­url="jdbc:mysql://localhost/db_example" 
               ­­username=user 
               ­­password=password 
               ­­logLevel=info 
               update




                                          ISC - 2012
                                     Paulo Clavijo Esteban
                               clavijo_pau@ingenieriadesoftware.com   18
Primeros pasos con LiquiBase (4/4)

  4º – Revisar la BDD
    Podemos revisar que el cambio se ha realizado en nuestra
    BDD.
    Y que este queda registrado en la tabla
    databasechangelog.




                                   ISC - 2012
                              Paulo Clavijo Esteban
                        clavijo_pau@ingenieriadesoftware.com   19
Buenas Prácticas (1/3)

  Añadir comentarios a los changesets.

     <changeSet id="2" author="pau">
     <comment>Se añade columna descripcion a tabla producto</comment>
         <alterTable tableName="producto">
             <column name="descripcion" type="varchar(100)" />
         </createTable>
     </changeSet>




  Seguir siempre el mismo criterio para los IDs. Puede ser un
  numero (1), una fecha y numero (20120401­1), etc.




                                         ISC - 2012
                                    Paulo Clavijo Esteban
                              clavijo_pau@ingenieriadesoftware.com      20
Buenas Prácticas (2/3)

     Organizar los ChangeLogs.
        Utilizar una estructura de directorios y nombres de fichero.




        Utilizar includes en db.changelog.xml
 <databaseChangeLog
   xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema­instance"
   xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
          http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog­2.0.xsd">
  
      <include file="tablas.changelog.xml" relativeToChangelogFile="true" />
      <include file="datos.changelog.xml" relativeToChangelogFile="true" />

 </databaseChangeLog>




                                                        ISC - 2012
                                                   Paulo Clavijo Esteban
                                             clavijo_pau@ingenieriadesoftware.com   21
Buenas Prácticas (3/3)

  Utilizar el fichero de propiedades liquibase.properties
     Nos evita tener que pasar los parámetros de conexión a la
     BDD, en cada llamada a la herramienta liquibase.
              driver=com.mysql.jdbc.Driver
              classpath=lib/mysql.jar
              changeLogFile=db.changelog.xml
              url=jdbc:mysql://localhost/db_example
              username=user
              password=password
              logLevel=info


     De esta forma llamamos a liquibase indicando únicamente
     la acción.
             
             $ java ­jar liquibase update




                                       ISC - 2012
                                  Paulo Clavijo Esteban
                            clavijo_pau@ingenieriadesoftware.com   22
Rolling Back de Cambios

  Crear Tags “tag”
           $ java ­jar liquibase tag v0.1



  Deshacer todos los cambios hasta el Tag indicado “rollback”
           $ java ­jar liquibase rollback v0.1


  Deshacer todos los cambios hasta fecha “rollbackToDate”
           $ java ­jar liquibase rollbackToDate '2012­04­01'T'00:00:00'


  Deshacer los últimos N cambios “rollbackCount”
           $ java ­jar liquibase rollbackCount 1




                                         ISC - 2012
                                    Paulo Clavijo Esteban
                              clavijo_pau@ingenieriadesoftware.com        23
Acciones de Refactoring disponibles (1/2)

  LiquiBase permite definir todo tipo de modificaciones
  mediante su sintaxis XML.
     Add Column                                             Create View
     Rename Column                                          Rename View
     Modify Column                                          Drop View
     Drop Column                                            Merge Columns
     Alter Sequence                                         Create Stored Procedure
     Create Table                                           Insert
     Rename Table                                           Etc ...
     Drop Table

              Imprescindible revisar la documentación oficial
              www.liquibase.org/manual/refactoring_commands



                                         ISC - 2012
                                    Paulo Clavijo Esteban
                              clavijo_pau@ingenieriadesoftware.com                    24
Acciones de Refactoring disponibles (2/2)

  También permite incluir cambios mediante ficheros SQL.
 db.changelog.xml
     <changeSet id="3" author="pau">
         <comment>Se crea nueva tabla usuarios</comment>
         <sqlFile path="sql/3­create_usuarios.sql">
         <rollback>
              <dropTable tableName="usuarios"/>
         </rollback>
     </changeSet>


 3-create_usuarios.sql

     CREATE TABLE usuarios (
         Id int PRIMARY KEY,
         Nombre varchar(50)
     );



     Si utilizamos SQL, debemos encargarnos nosotros de indicar las acciones de rollback



                                             ISC - 2012
                                        Paulo Clavijo Esteban
                                  clavijo_pau@ingenieriadesoftware.com                     25
Integración con Maven (1/2)

  pom.xml
 <plugins>  
      <!­­ Liquibase Plugin ­­>
      <plugin>
           <groupId>org.liquibase</groupId>
           <artifactId>liquibase­maven­plugin</artifactId>
           <version>2.0.3</version>
           <configuration>
                <propertyFile>src/main/resources/liquibase/liquibase.properties</propertyFile>
               <promptOnNonLocalDatabase>false</promptOnNonLocalDatabase>
           </configuration>
           <executions>
            <execution>
                <phase>process­resources</phase>
                <goals>
                     <goal>update</goal>
                </goals>
            </execution>
           </executions>
      </plugin>
 </plugins>



                         http://www.liquibase.org/manual/maven


                                                  ISC - 2012
                                             Paulo Clavijo Esteban
                                       clavijo_pau@ingenieriadesoftware.com                      26
Integración con Maven (2/2)

  Por defecto durante el build del proyecto maven llamará a
  liquibase con la acción update.
  Pero podemos invocar directamente al plugin para hacer uso
  de otras acciones. Ejemplos:
          $ mvn liquibase:update



          $ mvn liquibase:rollback ­Dliquibase.rollbackCount=1




          $ mvn liquibase:tag ­Dliquibase.tag=v2.0



          $ mvn liquibase:help




                                        ISC - 2012
                                   Paulo Clavijo Esteban
                             clavijo_pau@ingenieriadesoftware.com   27
Novedades en versión 2.0.4

  Se esta trabajando ya en Liquibase 3.0.
  La última versión estable es Liquibase 2.0.4, liberada el
  pasado 19 de Abril.
  Principalmente incluye correcciones de errores, pero entre las
  nuevas funcionalidades podemos destacar la posibilidad de
  insertar datos de tipo blob/clob.
    <insert tableName="TEST_BLOB">
        <column name="a_blob" valueBlob="imagen.png" />
    </insert>

    <insert tableName="TEST_CLOB">
        <column name="a_clob" valueClob="texto.txt" />
    </insert>




                                         ISC - 2012
                                    Paulo Clavijo Esteban
                              clavijo_pau@ingenieriadesoftware.com   28
Referencias



      http://www.liquibase.org
      http://www.liquibase.org/quickstart
      http://blog.liquibase.org
      Liquibase - Gestión De Cambios En BDD
      Getting the most out of LiquiBase
      Liquibase – Maven plugin
      Lintips




                               ISC - 2012
                          Paulo Clavijo Esteban
                    clavijo_pau@ingenieriadesoftware.com   29
Sobre el Autor:

Paulo Clavijo Esteban
Software Engineer en ISC
 clavijo_pau@ingenieriadesoftware.com

        Blog: www.lintips.com
       Email: paucls@gmail.com




                                        30

More Related Content

What's hot

Clean architecture
Clean architectureClean architecture
Clean architecture
andbed
 
A testing strategy for hexagonal applications
A testing strategy for hexagonal applicationsA testing strategy for hexagonal applications
A testing strategy for hexagonal applications
Matthias Noback
 
Sql server パーティション 概要
Sql server パーティション 概要Sql server パーティション 概要
Sql server パーティション 概要
Masayuki Ozawa
 

What's hot (20)

Open Liberty / WebSphere Liberty
Open Liberty / WebSphere LibertyOpen Liberty / WebSphere Liberty
Open Liberty / WebSphere Liberty
 
The Architect's Clue Bucket
The Architect's Clue BucketThe Architect's Clue Bucket
The Architect's Clue Bucket
 
Dynatrace が特別な7つの理由
Dynatrace が特別な7つの理由Dynatrace が特別な7つの理由
Dynatrace が特別な7つの理由
 
Presentation sql server to oracle a database migration roadmap
Presentation    sql server to oracle a database migration roadmapPresentation    sql server to oracle a database migration roadmap
Presentation sql server to oracle a database migration roadmap
 
Configure SharePoint Server 2013 in a Three-Tier Farm
Configure SharePoint Server 2013 in a Three-Tier FarmConfigure SharePoint Server 2013 in a Three-Tier Farm
Configure SharePoint Server 2013 in a Three-Tier Farm
 
Clean architecture
Clean architectureClean architecture
Clean architecture
 
Clean Architecture
Clean ArchitectureClean Architecture
Clean Architecture
 
A testing strategy for hexagonal applications
A testing strategy for hexagonal applicationsA testing strategy for hexagonal applications
A testing strategy for hexagonal applications
 
Database change management with Liquibase
Database change management with LiquibaseDatabase change management with Liquibase
Database change management with Liquibase
 
Advanced Git Tutorial
Advanced Git TutorialAdvanced Git Tutorial
Advanced Git Tutorial
 
DevOps-as-a-Service: Towards Automating the Automation
DevOps-as-a-Service: Towards Automating the AutomationDevOps-as-a-Service: Towards Automating the Automation
DevOps-as-a-Service: Towards Automating the Automation
 
Otimizando um banco de dados Oracle para Exadata
Otimizando um banco de dados Oracle para ExadataOtimizando um banco de dados Oracle para Exadata
Otimizando um banco de dados Oracle para Exadata
 
Sql server パーティション 概要
Sql server パーティション 概要Sql server パーティション 概要
Sql server パーティション 概要
 
SOLID Principles
SOLID PrinciplesSOLID Principles
SOLID Principles
 
Learning git
Learning gitLearning git
Learning git
 
Managing Technical Debt
Managing Technical DebtManaging Technical Debt
Managing Technical Debt
 
Git branching strategies
Git branching strategiesGit branching strategies
Git branching strategies
 
Microservices chassis
Microservices chassisMicroservices chassis
Microservices chassis
 
Intro to Reactive Programming
Intro to Reactive ProgrammingIntro to Reactive Programming
Intro to Reactive Programming
 
What is agile?
What is agile?What is agile?
What is agile?
 

Similar to Gestión de Cambios de BBDD con LiquiBase

Moodlemoot spain 2013. actualización a moodle 2 enfoque técnico
Moodlemoot spain 2013. actualización a moodle 2  enfoque técnicoMoodlemoot spain 2013. actualización a moodle 2  enfoque técnico
Moodlemoot spain 2013. actualización a moodle 2 enfoque técnico
Juan Leyva Delgado
 
Sistema gestor de base de datos jaime valdez
Sistema gestor de base de datos jaime valdezSistema gestor de base de datos jaime valdez
Sistema gestor de base de datos jaime valdez
jaime0910
 
Base de datos consulta 1
Base de datos consulta 1Base de datos consulta 1
Base de datos consulta 1
Alex Yungan
 

Similar to Gestión de Cambios de BBDD con LiquiBase (20)

Sistemas para el Control de Versiones de Código
Sistemas para el Control de Versiones de CódigoSistemas para el Control de Versiones de Código
Sistemas para el Control de Versiones de Código
 
Lecciones aprendidas SQL Server AlwaryOn
Lecciones aprendidas SQL Server AlwaryOnLecciones aprendidas SQL Server AlwaryOn
Lecciones aprendidas SQL Server AlwaryOn
 
Moodlemoot spain 2013. actualización a moodle 2 enfoque técnico
Moodlemoot spain 2013. actualización a moodle 2  enfoque técnicoMoodlemoot spain 2013. actualización a moodle 2  enfoque técnico
Moodlemoot spain 2013. actualización a moodle 2 enfoque técnico
 
Mysql posgresql
Mysql posgresqlMysql posgresql
Mysql posgresql
 
AlwaysON Lecciones Aprendidas
AlwaysON Lecciones AprendidasAlwaysON Lecciones Aprendidas
AlwaysON Lecciones Aprendidas
 
[ES] Control de versiones con subversion
[ES] Control de versiones con  subversion[ES] Control de versiones con  subversion
[ES] Control de versiones con subversion
 
Base de Datos (Grupo3).pptx
Base de Datos (Grupo3).pptxBase de Datos (Grupo3).pptx
Base de Datos (Grupo3).pptx
 
Smbd equipo 2
Smbd equipo 2Smbd equipo 2
Smbd equipo 2
 
Uf2216 04-git
Uf2216 04-gitUf2216 04-git
Uf2216 04-git
 
Guia para el diseño modular de sistemas
Guia para el diseño modular de sistemasGuia para el diseño modular de sistemas
Guia para el diseño modular de sistemas
 
Sistema gestor de base de datos jaime valdez
Sistema gestor de base de datos jaime valdezSistema gestor de base de datos jaime valdez
Sistema gestor de base de datos jaime valdez
 
En 20 minutos ...Control de Cambios de la BD con Liquibase
En 20 minutos ...Control de Cambios de la BD con LiquibaseEn 20 minutos ...Control de Cambios de la BD con Liquibase
En 20 minutos ...Control de Cambios de la BD con Liquibase
 
Smbd
SmbdSmbd
Smbd
 
Administracion de datos
Administracion de datosAdministracion de datos
Administracion de datos
 
24 HOP edición Español - Alm para el desarrollo de base de datos sql server -...
24 HOP edición Español - Alm para el desarrollo de base de datos sql server -...24 HOP edición Español - Alm para el desarrollo de base de datos sql server -...
24 HOP edición Español - Alm para el desarrollo de base de datos sql server -...
 
Base de datos consulta 1
Base de datos consulta 1Base de datos consulta 1
Base de datos consulta 1
 
Semana 4 control de versiones planificacion y gestion
Semana 4 control de versiones planificacion y gestionSemana 4 control de versiones planificacion y gestion
Semana 4 control de versiones planificacion y gestion
 
Semana 01.pdf
Semana 01.pdfSemana 01.pdf
Semana 01.pdf
 
24 Horas Español 2014 - ALM para el desarrollo de base de datos SQL Server
24 Horas Español 2014 - ALM para el desarrollo de base de datos SQL Server24 Horas Español 2014 - ALM para el desarrollo de base de datos SQL Server
24 Horas Español 2014 - ALM para el desarrollo de base de datos SQL Server
 
Curso_DataBase_Tarea01
Curso_DataBase_Tarea01Curso_DataBase_Tarea01
Curso_DataBase_Tarea01
 

More from Paulo Clavijo

More from Paulo Clavijo (15)

Consumer-Driven Contract Testing - Workshop - January 2021
Consumer-Driven Contract Testing - Workshop - January 2021Consumer-Driven Contract Testing - Workshop - January 2021
Consumer-Driven Contract Testing - Workshop - January 2021
 
User story slicing exercise
User story slicing exerciseUser story slicing exercise
User story slicing exercise
 
CI/CD non-breaking changes exercise - Cork Software Crafters - February 2020
CI/CD non-breaking changes exercise - Cork Software Crafters - February 2020CI/CD non-breaking changes exercise - Cork Software Crafters - February 2020
CI/CD non-breaking changes exercise - Cork Software Crafters - February 2020
 
Breaking Dependencies Legacy Code - Cork Software Crafters - September 2019
Breaking Dependencies Legacy Code -  Cork Software Crafters - September 2019Breaking Dependencies Legacy Code -  Cork Software Crafters - September 2019
Breaking Dependencies Legacy Code - Cork Software Crafters - September 2019
 
Legacy Code and Refactoring Workshop - Session 1 - October 2019
Legacy Code and Refactoring Workshop - Session 1 - October 2019Legacy Code and Refactoring Workshop - Session 1 - October 2019
Legacy Code and Refactoring Workshop - Session 1 - October 2019
 
Approval Testing & Mutation Testing - Cork Software Crafters - June 2019
Approval Testing & Mutation Testing - Cork Software Crafters - June 2019Approval Testing & Mutation Testing - Cork Software Crafters - June 2019
Approval Testing & Mutation Testing - Cork Software Crafters - June 2019
 
TDD and Simple Design Workshop - Session 1 - March 2019
TDD and Simple Design Workshop - Session 1 - March 2019TDD and Simple Design Workshop - Session 1 - March 2019
TDD and Simple Design Workshop - Session 1 - March 2019
 
TDD and Simple Design Workshop - Session 1 - November 2018
TDD and Simple Design Workshop - Session 1 - November 2018TDD and Simple Design Workshop - Session 1 - November 2018
TDD and Simple Design Workshop - Session 1 - November 2018
 
Outside-in TDD with Test Doubles
Outside-in TDD with Test DoublesOutside-in TDD with Test Doubles
Outside-in TDD with Test Doubles
 
Angular and Redux
Angular and ReduxAngular and Redux
Angular and Redux
 
DDD Strategic Design - Context Maps - Paulo Clavijo - April 2018
DDD Strategic Design - Context Maps - Paulo Clavijo - April 2018DDD Strategic Design - Context Maps - Paulo Clavijo - April 2018
DDD Strategic Design - Context Maps - Paulo Clavijo - April 2018
 
Consumer-Driven Contract Testing
Consumer-Driven Contract TestingConsumer-Driven Contract Testing
Consumer-Driven Contract Testing
 
ATDD - Desarrollo Dirigido por Test de Aceptación
ATDD - Desarrollo Dirigido por Test de AceptaciónATDD - Desarrollo Dirigido por Test de Aceptación
ATDD - Desarrollo Dirigido por Test de Aceptación
 
Tests Unitarios con JUnit 4
Tests Unitarios con JUnit 4Tests Unitarios con JUnit 4
Tests Unitarios con JUnit 4
 
Introducción a Spring Roo
Introducción a Spring RooIntroducción a Spring Roo
Introducción a Spring Roo
 

Recently uploaded

Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
AnnimoUno1
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
FagnerLisboa3
 

Recently uploaded (15)

Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
presentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptxpresentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptx
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
Presentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmerilPresentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmeril
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 

Gestión de Cambios de BBDD con LiquiBase

  • 1. Gestión de Cambios de BDD con LiquiBase ISC – Abril 2012 Paulo Clavijo Esteban clavijo_pau@ingenieriadesoftware.com 1
  • 2. Agenda Contexto La problemática del cambio ¿Qué es LiquiBase? Características principales de LiquiBase ¿Cómo es la gestión con LiquiBase? Primeros Pasos Rolling Back de Cambios Buenas Prácticas Acciones de Refactoring disponibles Integración con Maven ISC - 2012 Paulo Clavijo Esteban clavijo_pau@ingenieriadesoftware.com 2
  • 3. Contexto ¿Si nunca desarrollamos código sin un control de versiones, por que desarrollamos la BDD sin el? ISC - 2012 Paulo Clavijo Esteban clavijo_pau@ingenieriadesoftware.com 3
  • 4. La problemática del cambio (1/3) Las BDD son una parte fundamental en la mayoría de los proyectos. ¿Como realizamos el seguimiento de sus cambios? Necesitamos: Soportar múltiples desarrolladores. Soportar ramas y versiones. Flexibilizar y automatizar como se aplican los cambios. ISC - 2012 Paulo Clavijo Esteban clavijo_pau@ingenieriadesoftware.com 4
  • 5. La problemática del cambio (2/3) Antes de LiquiBase Ejecución manual de cambios en el modelo de BDD. No podíamos garantizar que una BDD se encontrase en una versión concreta. Nos era demasiado costoso revertir la BDD a estados anteriores. No podíamos garantizar la sincronía entre el modelo de datos y el modelo de entidades de la aplicación. Generación manual de documentación sobre el modelo de datos. Las incorporaciones de un nuevo miembro al equipo eran mas costosas. ISC - 2012 Paulo Clavijo Esteban clavijo_pau@ingenieriadesoftware.com 5
  • 6. La problemática del cambio (3/3) Soluciones? 6
  • 7. ¿Qué es LiquiBase? (1/3) LiquiBase es una librería OpenSource (bajo licencia Apache 2.0), independiente de la base de datos, que nos permitirá realizar el seguimiento, la gestión y aplicación de cambios en nuestro modelo de datos. Database Refactoring Database Change Management ISC - 2012 Paulo Clavijo Esteban clavijo_pau@ingenieriadesoftware.com 7
  • 8. ¿Qué es LiquiBase? (2/3) Permite aplicar cambios de una forma controlada y automatizada así como llevar un histórico de los mismos. Pensada especialmente para equipos de desarrollo ágiles, con múltiples desarrolladores y ramas de código. ISC - 2012 Paulo Clavijo Esteban clavijo_pau@ingenieriadesoftware.com 8
  • 9. ¿Qué es LiquiBase? (3/3) Una de las ideas es conseguir que los refactoring o nuevos desarrollos de código subidos a SVN/CVS, se acompañen del refactoring del modelo de BDD, es decir subir también los changesets LiquiBase. De esta forma cuando el resto de desarrolladores actualicen, descargaran código y las modificaciones de BDD necesarias para que este funcione. Se puede conseguir que aplicar estos cambios sea casi transparente para los desarrolladores, ya que LiquiBase puede utilizarse no solo desde una linea de comandos, si no también mediante tareas Ant o mediante Maven. ISC - 2012 Paulo Clavijo Esteban clavijo_pau@ingenieriadesoftware.com 9
  • 10. Entorno Desarrollo ISC - 2012 Paulo Clavijo Esteban clavijo_pau@ingenieriadesoftware.com 10
  • 11. Características principales de LiquiBase LiquiBase soporta: Extensiones Fusionar (merge) cambios de múltiples desarrolladores Ramificaciones de código Múltiples Bases de Datos Gestionar datos en producción como también en varias etapas de testeo y desarrollo Cluster-safe database upgrades Actualizaciones automáticas o generación de scripts SQL que pueden ser aprobadas y aplicadas por un DBA Deshacer actualizaciones Revisar diferencias entre versiones ("diff"s) Generar logs de cambios iniciales desde bases de datos existentes Generación de documentación de cambios de bases de datos ISC - 2012 Paulo Clavijo Esteban clavijo_pau@ingenieriadesoftware.com 11
  • 12. ¿Cómo es la gestión con LiquiBase? (1/4) No es una herramienta “diff”. Trabaja de forma diferente a los tradicionales herramientas de versionado de esquemas. Almacena una lista de los cambios aplicados. ISC - 2012 Paulo Clavijo Esteban clavijo_pau@ingenieriadesoftware.com 12
  • 13. ¿Cómo es la gestión con LiquiBase? (2/4) LiquiBase utiliza ficheros XML para describir los cambios (changesets), lo que permite independencia del sistema de BDD utilizado. Un changeset se identifica por su id y author, así como por el propio nombre del fichero. Cuando aplicamos un changeset, LiquiBase a parte de realizar las modificaciones pertinentes, registra una entrada con el cambio en su tabla de histórico DatabaseChangeLog. De hecho, antes de aplicar un changeset, se comprueba con dicha tabla que este no se ha realizado previamente. ISC - 2012 Paulo Clavijo Esteban clavijo_pau@ingenieriadesoftware.com 13
  • 14. ¿Cómo es la gestión con LiquiBase? (3/4) LiquiBase utiliza dos tablas: databasechangelock Utilizada para controlar la concurrencia. databasechangelog Para el registro de cambios aplicados. ISC - 2012 Paulo Clavijo Esteban clavijo_pau@ingenieriadesoftware.com 14
  • 15. ¿Cómo es la gestión con LiquiBase? (4/4) Ya que todos los cambios en la base de datos son almacenados en un formato legible para los humanos (changesets), permite también su seguimiento y control el sistema de control de versiones. Podemos utilizar LiquiBase directamente como una herramienta de comandos, o configurarla como un plugin de Ant o de Maven. ISC - 2012 Paulo Clavijo Esteban clavijo_pau@ingenieriadesoftware.com 15
  • 16. Primeros pasos con LiquiBase (1/4) 1º – Definir el fichero Changelog db.changelog.xml <?xml version="1.0" encoding="UTF­8"?>   <databaseChangeLog   xmlns="http://www.liquibase.org/xml/ns/dbchangelog"   xmlns:xsi="http://www.w3.org/2001/XMLSchema­instance"   xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog          http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog­2.0.xsd">   </databaseChangeLog> En este fichero es donde indicamos todos los cambios o Changesets. ISC - 2012 Paulo Clavijo Esteban clavijo_pau@ingenieriadesoftware.com 16
  • 17. Primeros pasos con LiquiBase (2/4) 2º - Definir un Changeset. db.changelog.xml <?xml version="1.0" encoding="UTF­8"?>   <databaseChangeLog   xmlns="http://www.liquibase.org/xml/ns/dbchangelog"   xmlns:xsi="http://www.w3.org/2001/XMLSchema­instance"   xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog          http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog­2.0.xsd">     <changeSet id="1" author="pau">         <createTable tableName="producto">             <column name="id" type="int">                 <constraints primaryKey="true" nullable="false"/>             </column>             <column name="nombre" type="varchar(50)">                 <constraints nullable="false"/>             </column>             <column name="precio" type="double" />             <column name="baja" type="boolean" defaultValueBoolean="false"/>         </createTable>     </changeSet>   </databaseChangeLog> ISC - 2012 Paulo Clavijo Esteban clavijo_pau@ingenieriadesoftware.com 17
  • 18. Primeros pasos con LiquiBase (3/4) 3º – Aplicar el Changeset Podemos ejecutar el Changeset de varias formas: mediante linea de comandos, Ant, Maven, Grails, etc. Por ejemplo desde linea de comandos contra una BDD MySql. java ­jar liquibase.jar ­­driver=com.mysql.jdbc.Driver       ­­classpath=lib/mysql.jar       ­­changeLogFile=db.changelog.xml       ­­url="jdbc:mysql://localhost/db_example"       ­­username=user       ­­password=password       ­­logLevel=info       update ISC - 2012 Paulo Clavijo Esteban clavijo_pau@ingenieriadesoftware.com 18
  • 19. Primeros pasos con LiquiBase (4/4) 4º – Revisar la BDD Podemos revisar que el cambio se ha realizado en nuestra BDD. Y que este queda registrado en la tabla databasechangelog. ISC - 2012 Paulo Clavijo Esteban clavijo_pau@ingenieriadesoftware.com 19
  • 20. Buenas Prácticas (1/3) Añadir comentarios a los changesets.     <changeSet id="2" author="pau"> <comment>Se añade columna descripcion a tabla producto</comment>         <alterTable tableName="producto">             <column name="descripcion" type="varchar(100)" />         </createTable>     </changeSet> Seguir siempre el mismo criterio para los IDs. Puede ser un numero (1), una fecha y numero (20120401­1), etc. ISC - 2012 Paulo Clavijo Esteban clavijo_pau@ingenieriadesoftware.com 20
  • 21. Buenas Prácticas (2/3) Organizar los ChangeLogs. Utilizar una estructura de directorios y nombres de fichero. Utilizar includes en db.changelog.xml <databaseChangeLog   xmlns="http://www.liquibase.org/xml/ns/dbchangelog"   xmlns:xsi="http://www.w3.org/2001/XMLSchema­instance"   xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog          http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog­2.0.xsd">   <include file="tablas.changelog.xml" relativeToChangelogFile="true" /> <include file="datos.changelog.xml" relativeToChangelogFile="true" /> </databaseChangeLog> ISC - 2012 Paulo Clavijo Esteban clavijo_pau@ingenieriadesoftware.com 21
  • 22. Buenas Prácticas (3/3) Utilizar el fichero de propiedades liquibase.properties Nos evita tener que pasar los parámetros de conexión a la BDD, en cada llamada a la herramienta liquibase.  driver=com.mysql.jdbc.Driver  classpath=lib/mysql.jar  changeLogFile=db.changelog.xml  url=jdbc:mysql://localhost/db_example  username=user  password=password  logLevel=info De esta forma llamamos a liquibase indicando únicamente la acción.    $ java ­jar liquibase update ISC - 2012 Paulo Clavijo Esteban clavijo_pau@ingenieriadesoftware.com 22
  • 23. Rolling Back de Cambios Crear Tags “tag”   $ java ­jar liquibase tag v0.1 Deshacer todos los cambios hasta el Tag indicado “rollback”   $ java ­jar liquibase rollback v0.1 Deshacer todos los cambios hasta fecha “rollbackToDate”   $ java ­jar liquibase rollbackToDate '2012­04­01'T'00:00:00' Deshacer los últimos N cambios “rollbackCount”   $ java ­jar liquibase rollbackCount 1 ISC - 2012 Paulo Clavijo Esteban clavijo_pau@ingenieriadesoftware.com 23
  • 24. Acciones de Refactoring disponibles (1/2) LiquiBase permite definir todo tipo de modificaciones mediante su sintaxis XML. Add Column Create View Rename Column Rename View Modify Column Drop View Drop Column Merge Columns Alter Sequence Create Stored Procedure Create Table Insert Rename Table Etc ... Drop Table Imprescindible revisar la documentación oficial www.liquibase.org/manual/refactoring_commands ISC - 2012 Paulo Clavijo Esteban clavijo_pau@ingenieriadesoftware.com 24
  • 25. Acciones de Refactoring disponibles (2/2) También permite incluir cambios mediante ficheros SQL. db.changelog.xml     <changeSet id="3" author="pau"> <comment>Se crea nueva tabla usuarios</comment>         <sqlFile path="sql/3­create_usuarios.sql"> <rollback> <dropTable tableName="usuarios"/> </rollback>     </changeSet> 3-create_usuarios.sql     CREATE TABLE usuarios ( Id int PRIMARY KEY, Nombre varchar(50) ); Si utilizamos SQL, debemos encargarnos nosotros de indicar las acciones de rollback ISC - 2012 Paulo Clavijo Esteban clavijo_pau@ingenieriadesoftware.com 25
  • 26. Integración con Maven (1/2) pom.xml <plugins>   <!­­ Liquibase Plugin ­­> <plugin> <groupId>org.liquibase</groupId>        <artifactId>liquibase­maven­plugin</artifactId>        <version>2.0.3</version>           <configuration>                <propertyFile>src/main/resources/liquibase/liquibase.properties</propertyFile>               <promptOnNonLocalDatabase>false</promptOnNonLocalDatabase>           </configuration>        <executions>            <execution>          <phase>process­resources</phase>            <goals>              <goal>update</goal>            </goals>            </execution>        </executions> </plugin> </plugins> http://www.liquibase.org/manual/maven ISC - 2012 Paulo Clavijo Esteban clavijo_pau@ingenieriadesoftware.com 26
  • 27. Integración con Maven (2/2) Por defecto durante el build del proyecto maven llamará a liquibase con la acción update. Pero podemos invocar directamente al plugin para hacer uso de otras acciones. Ejemplos:   $ mvn liquibase:update   $ mvn liquibase:rollback ­Dliquibase.rollbackCount=1   $ mvn liquibase:tag ­Dliquibase.tag=v2.0   $ mvn liquibase:help ISC - 2012 Paulo Clavijo Esteban clavijo_pau@ingenieriadesoftware.com 27
  • 28. Novedades en versión 2.0.4 Se esta trabajando ya en Liquibase 3.0. La última versión estable es Liquibase 2.0.4, liberada el pasado 19 de Abril. Principalmente incluye correcciones de errores, pero entre las nuevas funcionalidades podemos destacar la posibilidad de insertar datos de tipo blob/clob. <insert tableName="TEST_BLOB"> <column name="a_blob" valueBlob="imagen.png" /> </insert> <insert tableName="TEST_CLOB"> <column name="a_clob" valueClob="texto.txt" /> </insert> ISC - 2012 Paulo Clavijo Esteban clavijo_pau@ingenieriadesoftware.com 28
  • 29. Referencias http://www.liquibase.org http://www.liquibase.org/quickstart http://blog.liquibase.org Liquibase - Gestión De Cambios En BDD Getting the most out of LiquiBase Liquibase – Maven plugin Lintips ISC - 2012 Paulo Clavijo Esteban clavijo_pau@ingenieriadesoftware.com 29
  • 30. Sobre el Autor: Paulo Clavijo Esteban Software Engineer en ISC clavijo_pau@ingenieriadesoftware.com Blog: www.lintips.com Email: paucls@gmail.com 30