Gestión de Cambiosde BDD con LiquiBase                ISC – Abril 2012              Paulo Clavijo Esteban              cla...
Agenda Contexto La problemática del cambio ¿Qué es LiquiBase? Características principales de LiquiBase ¿Cómo es la gestión...
Contexto           ¿Si nunca desarrollamos código sin un control de versiones,           por que desarrollamos la BDD sin ...
La problemática del cambio (1/3)  Las BDD son una parte fundamental en la mayoría de los proyectos.  ¿Como realizamos el s...
La problemática del cambio (2/3)  Antes de LiquiBase    Ejecución manual de cambios en el modelo de BDD.    No podíamos ga...
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 da...
¿Qué es LiquiBase? (2/3)  Permite aplicar cambios de una forma controlada y  automatizada así como llevar un histórico de ...
¿Qué es LiquiBase? (3/3)  Una de las ideas es conseguir que los refactoring o nuevos  desarrollos de código subidos a SVN/...
Entorno Desarrollo                                ISC - 2012                           Paulo Clavijo Esteban              ...
Características principales de LiquiBase  LiquiBase soporta:     Extensiones     Fusionar (merge) cambios de múltiples des...
¿Cómo es la gestión con LiquiBase? (1/4)  No es una herramienta “diff”.  Trabaja de forma diferente a los tradicionales he...
¿Cómo es la gestión con LiquiBase? (2/4)  LiquiBase utiliza ficheros XML para describir los cambios  (changesets), lo que ...
¿Cómo es la gestión con LiquiBase? (3/4)  LiquiBase utiliza dos tablas:     databasechangelock     Utilizada para controla...
¿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 legi...
Primeros pasos con LiquiBase (1/4)  1º – Definir el fichero Changelog db.changelog.xml <?xml version="1.0" encoding="UTF­8...
Primeros pasos con LiquiBase (2/4)  2º - Definir un Changeset. db.changelog.xml <?xml version="1.0" encoding="UTF­8"?>   <...
Primeros pasos con LiquiBase (3/4)  3º – Aplicar el Changeset    Podemos ejecutar el Changeset de varias formas: mediante ...
Primeros pasos con LiquiBase (4/4)  4º – Revisar la BDD    Podemos revisar que el cambio se ha realizado en nuestra    BDD...
Buenas Prácticas (1/3)  Añadir comentarios a los changesets.     <changeSet id="2" author="pau">     <comment>Se añade col...
Buenas Prácticas (2/3)     Organizar los ChangeLogs.        Utilizar una estructura de directorios y nombres de fichero.  ...
Buenas Prácticas (3/3)  Utilizar el fichero de propiedades liquibase.properties     Nos evita tener que pasar los parámetr...
Rolling Back de Cambios  Crear Tags “tag”           $ java ­jar liquibase tag v0.1  Deshacer todos los cambios hasta el Ta...
Acciones de Refactoring disponibles (1/2)  LiquiBase permite definir todo tipo de modificaciones  mediante su sintaxis XML...
Acciones de Refactoring disponibles (2/2)  También permite incluir cambios mediante ficheros SQL. db.changelog.xml     <ch...
Integración con Maven (1/2)  pom.xml <plugins>        <!­­ Liquibase Plugin ­­>      <plugin>           <groupId>org.liqui...
Integración con Maven (2/2)  Por defecto durante el build del proyecto maven llamará a  liquibase con la acción update.  P...
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, liberad...
Referencias      http://www.liquibase.org      http://www.liquibase.org/quickstart      http://blog.liquibase.org      Liq...
Sobre el Autor:Paulo Clavijo EstebanSoftware Engineer en ISC clavijo_pau@ingenieriadesoftware.com        Blog: www.lintips...
Upcoming SlideShare
Loading in …5
×

Gestión de Cambios de BBDD con LiquiBase

2,349 views

Published 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.

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,349
On SlideShare
0
From Embeds
0
Number of Embeds
13
Actions
Shares
0
Downloads
0
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Gestión de Cambios de BBDD con LiquiBase

  1. 1. Gestión de Cambiosde BDD con LiquiBase ISC – Abril 2012 Paulo Clavijo Esteban clavijo_pau@ingenieriadesoftware.com 1
  2. 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. 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. 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. 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. 6. La problemática del cambio (3/3) Soluciones? 6
  7. 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. 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. 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. 10. Entorno Desarrollo ISC - 2012 Paulo Clavijo Esteban clavijo_pau@ingenieriadesoftware.com 10
  11. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 30. Sobre el Autor:Paulo Clavijo EstebanSoftware Engineer en ISC clavijo_pau@ingenieriadesoftware.com Blog: www.lintips.com Email: paucls@gmail.com 30

×