• Save
Gestión de Cambios de BBDD con LiquiBase
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

Gestión de Cambios de BBDD con LiquiBase

  • 1,771 views
Uploaded on

Presentación utilizada en el seminario de introducción a la Gestión de Cambios de BBDD con LiquiBase que impartí en Abril 2012.

Presentación utilizada en el seminario de introducción a la Gestión de Cambios de BBDD con LiquiBase que impartí en Abril 2012.

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
1,771
On Slideshare
1,769
From Embeds
2
Number of Embeds
1

Actions

Shares
Downloads
0
Comments
0
Likes
1

Embeds 2

http://www.linkedin.com 2

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Gestión de Cambiosde 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­01T00: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 EstebanSoftware Engineer en ISC clavijo_pau@ingenieriadesoftware.com Blog: www.lintips.com Email: paucls@gmail.com 30