SlideShare une entreprise Scribd logo
Gestionnaire de migrations
Plan
1. Motivations
2. API
3. Démo
4. Stratégies pour l'existant
Motivations
Modifier BDD en continu
Industrialiser ses migrations
Rapprocher DBA et DÉV
Motivations
Refactoring
Modifier une portion de code, en maintenant la
sémantique de celui-ci.
Motivations
Refactoring
Principe de substitution de Liskov
Couverture de tests
...
Motivations
Refactoring de BDD
Modifier une partie du schéma (structures, données, triggers,
procédures stockées...) tout en maintenant sa sémantique.
Motivations
Refactoring de BDD
Contrats ?
Tests ?
Outillage ?
http://databaserefactoring.com/
Outillage
● Migrate4J BETA
● FlywayDB
● Liquibase
@author: Nathan Voxland
@license: Apache License 2.0
@source: Java (GITHUB)
@currentVersion: 2.0.5 / 3.0.0.RC2
@supports: Oracle, MySQL, PostgreSQL, DB2, ...
Concepts
Historique
Changelog / changesets
Preconditions / contexts
Historique
DATABASECHANGELOG
+---------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------------+--------------+------+-----+---------+-------+
| ID | varchar(63) | NO | PRI | NULL | |
| AUTHOR | varchar(63) | NO | PRI | NULL | |
| FILENAME | varchar(200) | NO | PRI | NULL | |
| DATEEXECUTED | datetime | NO | | NULL | |
| ORDEREXECUTED | int(11) | NO | | NULL | |
| EXECTYPE | varchar(10) | NO | | NULL | |
| MD5SUM | varchar(35) | YES | | NULL | |
| DESCRIPTION | varchar(255) | YES | | NULL | |
| COMMENTS | varchar(255) | YES | | NULL | |
| TAG | varchar(255) | YES | | NULL | |
| LIQUIBASE | varchar(20) | YES | | NULL | |
+---------------+--------------+------+-----+---------+-------+
Changelog ~ point(s) d'entrée
<databaseChangeLog xmlns...>
<include file="my/company/migrations/9.1/changelog.xml"
relativeToChangelogFile="true" />
<include file="my/company/migrations/10.0/changelog.xml"
relativeToChangelogFile="true" />
<!-- [...] -->
</databaseChangeLog>
Changeset ~ unité de migration
Identité = Path + ID + Auteur
<changeSet id="exemple_de_changeset" author="florent.biville">
<comment>Vente en ligne de minitels</comment>
<createTable tableName="minitels"
remarks="EVOL-42">
<column name="id" type="INTEGER" />
</createTable>
</changeSet>
joué une seule fois sauf si runAlways="true"
changements ensuite interdits sauf si runOnChange="true"
Changeset ~ unité de migration
Pourquoi XML* ?
1. indépendance vendor
2. rollback automatique
3. utilisation SQL possible ;-)
* ou JSON/YAML/"SQL annoté"
Changeset ~ rollback
Rollback manuel (SQL ou tags Liquibase standards)
<changeSet id="exemple_de_changeset" author="florent.biville">
<comment>Vente en ligne de minitels</comment>
<sql>UPDATE Persons SET age = age + 42;</sql>
<rollback>
UPDATE Persons SET age = age - 42;
</rollback>
<!-- <rollback /> pour désactiver le rollback sur un changeset -->
</changeSet>
Preconditions
Requête custom ou tags Liquibase standard
<changeSet id="only_as_system" author="florent.biville">
<comment>Un grand pouvoir implique...</comment>
<preConditions><!-- DRY: <xi:include href="../common/run_as_system.xml" /> -->
<dbms type="oracle" />
<runningAs username="SYSTEM" />
</preConditions>
<!-- danger! high voltage! -->
</changeSet>
Context
Contexte paramétré à l'exécution
<changeSet id="exemple_contexte" context="local,test"
author="florent.biville">
<!-- danger! high voltage! -->
</changeSet>
il suffit qu'un seul des contextes corresponde
D
ÉM
O
https://github.com/fbiville/liquibase-demo
Stratégies pour l'existant : initialisation
Stratégie n°1 Stratégie n°2 Stratégie n°3
Définir 1 état de
référence.
Définir toutes les
migrations à partir de
cet état.
Inclure un changeset
de dump de la BDD
de référence.
Définir les migrations
ensuite.
Reconstruire toutes
les migrations
manuellement.
Y ajouter ensuite un
changeset de dump
de données.
Stratégies pour l'existant : initialisation
Stratégie n°1 Stratégie n°2 Stratégie n°3
+ simple
- récupération /
exécution du dump à
la charge de chaque
user
+ simple
- couplage fort avec
le vendor de BDD
+ indépendance vis-
à-vis du vendor
- fastidieux
Stratégies pour l'existant : intégration
Spring Maven CLI
Utiliser le bean
SpringLiquibase.
Idéal pour
déploiement sur
PAAS.
Utiliser le plugin
Maven.
Idéal pour la CI, aussi
riche en options que
le client CLI.
Utiliser l'utilitaire en
ligne de commandes.
"Implémentation" de
référence.
autres modes disponibles: Ant, listener de Servlet
CONCLUSION
?

Contenu connexe

Tendances

Concepts de sauvegarde et de récupération
Concepts de sauvegarde et de récupérationConcepts de sauvegarde et de récupération
Concepts de sauvegarde et de récupération
Soukaina Boujadi
 
Maven/Ivy vs OSGi (Toulouse Jug 26-05-2011)
Maven/Ivy vs OSGi (Toulouse Jug 26-05-2011)Maven/Ivy vs OSGi (Toulouse Jug 26-05-2011)
Maven/Ivy vs OSGi (Toulouse Jug 26-05-2011)
hibnico
 
Architecture java j2 ee a partager
Architecture java j2 ee a partagerArchitecture java j2 ee a partager
Architecture java j2 ee a partager
aliagadir
 
DrupalCamp Nantes 2016 - Migrer un site Drupal 6 ou Drupal 7 vers Drupal 8
DrupalCamp Nantes 2016 - Migrer un site Drupal 6 ou Drupal 7 vers Drupal 8DrupalCamp Nantes 2016 - Migrer un site Drupal 6 ou Drupal 7 vers Drupal 8
DrupalCamp Nantes 2016 - Migrer un site Drupal 6 ou Drupal 7 vers Drupal 8
Aurelien Navarre
 
Play Framework - Toulouse JUG - nov 2011
Play Framework - Toulouse JUG - nov 2011Play Framework - Toulouse JUG - nov 2011
Play Framework - Toulouse JUG - nov 2011
Sylvain Wallez
 
De Maven à SBT ScalaIO 2013
De Maven à SBT ScalaIO 2013De Maven à SBT ScalaIO 2013
De Maven à SBT ScalaIO 2013
Stephane Manciot
 
ToulouseJUG - REX Flex, Spring & Agilité
ToulouseJUG - REX Flex, Spring & AgilitéToulouseJUG - REX Flex, Spring & Agilité
ToulouseJUG - REX Flex, Spring & Agilité
Nicolas Deverge
 
PostgreSQL sous linux
PostgreSQL sous linuxPostgreSQL sous linux
PostgreSQL sous linux
Khalid ALLILI
 
Bases de données réparties par la pratique
Bases de données réparties par la pratiqueBases de données réparties par la pratique
Bases de données réparties par la pratique
Abdelouahed Abdou
 
JBoss clustering et tuning (lab 1/3)
JBoss clustering et tuning (lab 1/3)JBoss clustering et tuning (lab 1/3)
JBoss clustering et tuning (lab 1/3)
Fourat Zouari
 
JBoss clustering et tuning (lab 3/3)
JBoss clustering et tuning (lab 3/3)JBoss clustering et tuning (lab 3/3)
JBoss clustering et tuning (lab 3/3)
Fourat Zouari
 
JBoss clustering et tuning (lab 2/3)
JBoss clustering et tuning (lab 2/3)JBoss clustering et tuning (lab 2/3)
JBoss clustering et tuning (lab 2/3)
Fourat Zouari
 
YaJUG - Spring 3.0
YaJUG - Spring 3.0YaJUG - Spring 3.0
YaJUG - Spring 3.0
Gildas Cuisinier
 
Spring Batch 17-05-2011
Spring Batch 17-05-2011Spring Batch 17-05-2011
Spring Batch 17-05-2011
Normandy JUG
 
Db aing td1v1
Db aing td1v1Db aing td1v1
Db aing td1v1
infcom
 
T1 corrections-qcm
T1 corrections-qcmT1 corrections-qcm
T1 corrections-qcm
infcom
 
Reporting avec JasperServer & iReport
Reporting avec JasperServer & iReportReporting avec JasperServer & iReport
Reporting avec JasperServer & iReport
Lilia Sfaxi
 
Dba oracle-v1
Dba oracle-v1Dba oracle-v1
Dba oracle-v1
infcom
 
Tpdba3
Tpdba3Tpdba3
Tpdba3
infcom
 

Tendances (20)

Concepts de sauvegarde et de récupération
Concepts de sauvegarde et de récupérationConcepts de sauvegarde et de récupération
Concepts de sauvegarde et de récupération
 
Maven/Ivy vs OSGi (Toulouse Jug 26-05-2011)
Maven/Ivy vs OSGi (Toulouse Jug 26-05-2011)Maven/Ivy vs OSGi (Toulouse Jug 26-05-2011)
Maven/Ivy vs OSGi (Toulouse Jug 26-05-2011)
 
JasperReport
JasperReportJasperReport
JasperReport
 
Architecture java j2 ee a partager
Architecture java j2 ee a partagerArchitecture java j2 ee a partager
Architecture java j2 ee a partager
 
DrupalCamp Nantes 2016 - Migrer un site Drupal 6 ou Drupal 7 vers Drupal 8
DrupalCamp Nantes 2016 - Migrer un site Drupal 6 ou Drupal 7 vers Drupal 8DrupalCamp Nantes 2016 - Migrer un site Drupal 6 ou Drupal 7 vers Drupal 8
DrupalCamp Nantes 2016 - Migrer un site Drupal 6 ou Drupal 7 vers Drupal 8
 
Play Framework - Toulouse JUG - nov 2011
Play Framework - Toulouse JUG - nov 2011Play Framework - Toulouse JUG - nov 2011
Play Framework - Toulouse JUG - nov 2011
 
De Maven à SBT ScalaIO 2013
De Maven à SBT ScalaIO 2013De Maven à SBT ScalaIO 2013
De Maven à SBT ScalaIO 2013
 
ToulouseJUG - REX Flex, Spring & Agilité
ToulouseJUG - REX Flex, Spring & AgilitéToulouseJUG - REX Flex, Spring & Agilité
ToulouseJUG - REX Flex, Spring & Agilité
 
PostgreSQL sous linux
PostgreSQL sous linuxPostgreSQL sous linux
PostgreSQL sous linux
 
Bases de données réparties par la pratique
Bases de données réparties par la pratiqueBases de données réparties par la pratique
Bases de données réparties par la pratique
 
JBoss clustering et tuning (lab 1/3)
JBoss clustering et tuning (lab 1/3)JBoss clustering et tuning (lab 1/3)
JBoss clustering et tuning (lab 1/3)
 
JBoss clustering et tuning (lab 3/3)
JBoss clustering et tuning (lab 3/3)JBoss clustering et tuning (lab 3/3)
JBoss clustering et tuning (lab 3/3)
 
JBoss clustering et tuning (lab 2/3)
JBoss clustering et tuning (lab 2/3)JBoss clustering et tuning (lab 2/3)
JBoss clustering et tuning (lab 2/3)
 
YaJUG - Spring 3.0
YaJUG - Spring 3.0YaJUG - Spring 3.0
YaJUG - Spring 3.0
 
Spring Batch 17-05-2011
Spring Batch 17-05-2011Spring Batch 17-05-2011
Spring Batch 17-05-2011
 
Db aing td1v1
Db aing td1v1Db aing td1v1
Db aing td1v1
 
T1 corrections-qcm
T1 corrections-qcmT1 corrections-qcm
T1 corrections-qcm
 
Reporting avec JasperServer & iReport
Reporting avec JasperServer & iReportReporting avec JasperServer & iReport
Reporting avec JasperServer & iReport
 
Dba oracle-v1
Dba oracle-v1Dba oracle-v1
Dba oracle-v1
 
Tpdba3
Tpdba3Tpdba3
Tpdba3
 

En vedette

[FR] Introduction à Spring Data Neo4j 3.x
[FR] Introduction à Spring Data Neo4j 3.x[FR] Introduction à Spring Data Neo4j 3.x
[FR] Introduction à Spring Data Neo4j 3.x
Florent Biville
 
Hands on Neo4J - Duchess France/Zenexity - 25/09/2013
Hands on Neo4J - Duchess France/Zenexity - 25/09/2013Hands on Neo4J - Duchess France/Zenexity - 25/09/2013
Hands on Neo4J - Duchess France/Zenexity - 25/09/2013
Florent Biville
 
DevFest Istanbul - a free guided tour of Neo4J
DevFest Istanbul - a free guided tour of Neo4JDevFest Istanbul - a free guided tour of Neo4J
DevFest Istanbul - a free guided tour of Neo4J
Florent Biville
 
Why Neo4J is awesome in 5 slides
Why Neo4J is awesome in 5 slidesWhy Neo4J is awesome in 5 slides
Why Neo4J is awesome in 5 slides
Florent Biville
 
Soft Shake Event / A soft introduction to Neo4J
Soft Shake Event / A soft introduction to Neo4JSoft Shake Event / A soft introduction to Neo4J
Soft Shake Event / A soft introduction to Neo4J
Florent Biville
 
A general introduction to Spring Data / Neo4J
A general introduction to Spring Data / Neo4JA general introduction to Spring Data / Neo4J
A general introduction to Spring Data / Neo4J
Florent Biville
 
Faciliter Une Réunion
Faciliter Une RéunionFaciliter Une Réunion
Faciliter Une Réunion
Frantz Degrigny
 
Liquibase & Flyway @ Baltic DevOps
Liquibase & Flyway @ Baltic DevOpsLiquibase & Flyway @ Baltic DevOps
Liquibase & Flyway @ Baltic DevOps
Andrei Solntsev
 
Le rôle du communicateur dans un projet d'intranet
Le rôle du communicateur dans un projet d'intranetLe rôle du communicateur dans un projet d'intranet
Le rôle du communicateur dans un projet d'intranet
Alogient - Experts en TI. Maîtres en affaires.
 
10 Años de la Normativa de Digitalización de Mapas Geológicos del SEGEMAR
10 Años de la Normativa de Digitalización de Mapas Geológicos del SEGEMAR10 Años de la Normativa de Digitalización de Mapas Geológicos del SEGEMAR
10 Años de la Normativa de Digitalización de Mapas Geológicos del SEGEMAR
Carlos Gabriel Asato
 
Nuestra propuesta (1)
Nuestra propuesta (1)Nuestra propuesta (1)
Nuestra propuesta (1)
Conchi Allica
 
El material escolar
El material escolarEl material escolar
El material escolar
José I. Iglesia Puig
 
Sociéte en commandite simple
Sociéte en commandite simpleSociéte en commandite simple
Sociéte en commandite simple
Yaya Im
 
2012 09 13 [1]
2012 09 13 [1]2012 09 13 [1]
2012 09 13 [1]
evanim
 
Unit 2 vacation comic life
Unit 2 vacation comic lifeUnit 2 vacation comic life
Unit 2 vacation comic life
sb436470mhs
 
Sexualité, amour et internet
Sexualité, amour et internetSexualité, amour et internet
Sexualité, amour et internet
Ziz10
 
Women’s and Children’s Health: Supporting Accountability - General Perspectiv...
Women’s and Children’s Health: Supporting Accountability - General Perspectiv...Women’s and Children’s Health: Supporting Accountability - General Perspectiv...
Women’s and Children’s Health: Supporting Accountability - General Perspectiv...
EveryWomanEveryChild
 
FASHIONBLALA - On a marché dans l'espace - Conseil en décoration et aménageme...
FASHIONBLALA - On a marché dans l'espace - Conseil en décoration et aménageme...FASHIONBLALA - On a marché dans l'espace - Conseil en décoration et aménageme...
FASHIONBLALA - On a marché dans l'espace - Conseil en décoration et aménageme...
mmi-deco
 
Suzanne Asselin - L’importance de la gestion de la relation client dans le ré...
Suzanne Asselin - L’importance de la gestion de la relation client dans le ré...Suzanne Asselin - L’importance de la gestion de la relation client dans le ré...
Suzanne Asselin - L’importance de la gestion de la relation client dans le ré...
Offices de Tourisme de France
 

En vedette (20)

[FR] Introduction à Spring Data Neo4j 3.x
[FR] Introduction à Spring Data Neo4j 3.x[FR] Introduction à Spring Data Neo4j 3.x
[FR] Introduction à Spring Data Neo4j 3.x
 
Hands on Neo4J - Duchess France/Zenexity - 25/09/2013
Hands on Neo4J - Duchess France/Zenexity - 25/09/2013Hands on Neo4J - Duchess France/Zenexity - 25/09/2013
Hands on Neo4J - Duchess France/Zenexity - 25/09/2013
 
DevFest Istanbul - a free guided tour of Neo4J
DevFest Istanbul - a free guided tour of Neo4JDevFest Istanbul - a free guided tour of Neo4J
DevFest Istanbul - a free guided tour of Neo4J
 
Why Neo4J is awesome in 5 slides
Why Neo4J is awesome in 5 slidesWhy Neo4J is awesome in 5 slides
Why Neo4J is awesome in 5 slides
 
Soft Shake Event / A soft introduction to Neo4J
Soft Shake Event / A soft introduction to Neo4JSoft Shake Event / A soft introduction to Neo4J
Soft Shake Event / A soft introduction to Neo4J
 
A general introduction to Spring Data / Neo4J
A general introduction to Spring Data / Neo4JA general introduction to Spring Data / Neo4J
A general introduction to Spring Data / Neo4J
 
Faciliter Une Réunion
Faciliter Une RéunionFaciliter Une Réunion
Faciliter Une Réunion
 
Liquibase & Flyway @ Baltic DevOps
Liquibase & Flyway @ Baltic DevOpsLiquibase & Flyway @ Baltic DevOps
Liquibase & Flyway @ Baltic DevOps
 
Le rôle du communicateur dans un projet d'intranet
Le rôle du communicateur dans un projet d'intranetLe rôle du communicateur dans un projet d'intranet
Le rôle du communicateur dans un projet d'intranet
 
Cyber revolution
Cyber revolutionCyber revolution
Cyber revolution
 
10 Años de la Normativa de Digitalización de Mapas Geológicos del SEGEMAR
10 Años de la Normativa de Digitalización de Mapas Geológicos del SEGEMAR10 Años de la Normativa de Digitalización de Mapas Geológicos del SEGEMAR
10 Años de la Normativa de Digitalización de Mapas Geológicos del SEGEMAR
 
Nuestra propuesta (1)
Nuestra propuesta (1)Nuestra propuesta (1)
Nuestra propuesta (1)
 
El material escolar
El material escolarEl material escolar
El material escolar
 
Sociéte en commandite simple
Sociéte en commandite simpleSociéte en commandite simple
Sociéte en commandite simple
 
2012 09 13 [1]
2012 09 13 [1]2012 09 13 [1]
2012 09 13 [1]
 
Unit 2 vacation comic life
Unit 2 vacation comic lifeUnit 2 vacation comic life
Unit 2 vacation comic life
 
Sexualité, amour et internet
Sexualité, amour et internetSexualité, amour et internet
Sexualité, amour et internet
 
Women’s and Children’s Health: Supporting Accountability - General Perspectiv...
Women’s and Children’s Health: Supporting Accountability - General Perspectiv...Women’s and Children’s Health: Supporting Accountability - General Perspectiv...
Women’s and Children’s Health: Supporting Accountability - General Perspectiv...
 
FASHIONBLALA - On a marché dans l'espace - Conseil en décoration et aménageme...
FASHIONBLALA - On a marché dans l'espace - Conseil en décoration et aménageme...FASHIONBLALA - On a marché dans l'espace - Conseil en décoration et aménageme...
FASHIONBLALA - On a marché dans l'espace - Conseil en décoration et aménageme...
 
Suzanne Asselin - L’importance de la gestion de la relation client dans le ré...
Suzanne Asselin - L’importance de la gestion de la relation client dans le ré...Suzanne Asselin - L’importance de la gestion de la relation client dans le ré...
Suzanne Asselin - L’importance de la gestion de la relation client dans le ré...
 

Similaire à Liquibase en action

Analyse et optimisation des performances du moteur SQL Serveur
Analyse et optimisation des performances du moteur SQL ServeurAnalyse et optimisation des performances du moteur SQL Serveur
Analyse et optimisation des performances du moteur SQL Serveur
Microsoft Technet France
 
Presentation jsf2
Presentation jsf2Presentation jsf2
Presentation jsf2
Damien GOUYETTE
 
Mariadb pour les developpeurs - OSDC
Mariadb pour les developpeurs - OSDCMariadb pour les developpeurs - OSDC
Mariadb pour les developpeurs - OSDC
Christophe Villeneuve
 
Les fonctions MariaDB - LeMug.fr
Les fonctions MariaDB - LeMug.frLes fonctions MariaDB - LeMug.fr
Les fonctions MariaDB - LeMug.fr
Christophe Villeneuve
 
Magento 2 à l’essai ! Conférence Bargento 2015 par les experts Magento de l'e...
Magento 2 à l’essai ! Conférence Bargento 2015 par les experts Magento de l'e...Magento 2 à l’essai ! Conférence Bargento 2015 par les experts Magento de l'e...
Magento 2 à l’essai ! Conférence Bargento 2015 par les experts Magento de l'e...
The e-Commerce Academy
 
SQL Debug avec Django @ PyConFr 2015
SQL Debug avec Django @ PyConFr 2015SQL Debug avec Django @ PyConFr 2015
SQL Debug avec Django @ PyConFr 2015
Rodolphe Quiédeville
 
En route vers Active Directory 2012 R2 et au-delà
En route vers Active Directory 2012 R2 et au-delà En route vers Active Directory 2012 R2 et au-delà
En route vers Active Directory 2012 R2 et au-delà
Microsoft Technet France
 
En route vers Active Directory 2012 R2 et au-delà
En route vers Active Directory 2012 R2 et au-delà En route vers Active Directory 2012 R2 et au-delà
En route vers Active Directory 2012 R2 et au-delà
Microsoft Décideurs IT
 
Des mises à jour? Emmenez votre application Stitch encore plus loin grâce aux...
Des mises à jour? Emmenez votre application Stitch encore plus loin grâce aux...Des mises à jour? Emmenez votre application Stitch encore plus loin grâce aux...
Des mises à jour? Emmenez votre application Stitch encore plus loin grâce aux...
MongoDB
 
Symfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 PerformantSymfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 Performant
Hugo Hamon
 
SSL 2011 : Présentation de 2 bases noSQL
SSL 2011 : Présentation de 2 bases noSQLSSL 2011 : Présentation de 2 bases noSQL
SSL 2011 : Présentation de 2 bases noSQL
Hervé Leclerc
 
Et pourquoi pas JEE ?
Et pourquoi pas JEE ?Et pourquoi pas JEE ?
Et pourquoi pas JEE ?
PALO IT
 
Deep Dive Performance , le In-Memory dans SQL Server
Deep Dive Performance , le In-Memory dans SQL ServerDeep Dive Performance , le In-Memory dans SQL Server
Deep Dive Performance , le In-Memory dans SQL Server
Microsoft
 
Pytong2015
Pytong2015Pytong2015
Drools et les moteurs de règles
Drools et les moteurs de règlesDrools et les moteurs de règles
Drools et les moteurs de règles
Publicis Sapient Engineering
 
Cl314 g formation-db2-pour-luw-nouvelles-fonctionnalites-et-considerations-po...
Cl314 g formation-db2-pour-luw-nouvelles-fonctionnalites-et-considerations-po...Cl314 g formation-db2-pour-luw-nouvelles-fonctionnalites-et-considerations-po...
Cl314 g formation-db2-pour-luw-nouvelles-fonctionnalites-et-considerations-po...
CERTyou Formation
 
JUG Nantes - Telosys Tools - Avril 2014
JUG Nantes - Telosys Tools - Avril 2014 JUG Nantes - Telosys Tools - Avril 2014
JUG Nantes - Telosys Tools - Avril 2014
telosys
 
Telosys tools jug-nantes-2014-v1.2
Telosys tools jug-nantes-2014-v1.2Telosys tools jug-nantes-2014-v1.2
Telosys tools jug-nantes-2014-v1.2
Laurent Guérin
 

Similaire à Liquibase en action (20)

2
22
2
 
Analyse et optimisation des performances du moteur SQL Serveur
Analyse et optimisation des performances du moteur SQL ServeurAnalyse et optimisation des performances du moteur SQL Serveur
Analyse et optimisation des performances du moteur SQL Serveur
 
Presentation jsf2
Presentation jsf2Presentation jsf2
Presentation jsf2
 
Mariadb pour les developpeurs - OSDC
Mariadb pour les developpeurs - OSDCMariadb pour les developpeurs - OSDC
Mariadb pour les developpeurs - OSDC
 
Les fonctions MariaDB - LeMug.fr
Les fonctions MariaDB - LeMug.frLes fonctions MariaDB - LeMug.fr
Les fonctions MariaDB - LeMug.fr
 
Magento 2 à l’essai ! Conférence Bargento 2015 par les experts Magento de l'e...
Magento 2 à l’essai ! Conférence Bargento 2015 par les experts Magento de l'e...Magento 2 à l’essai ! Conférence Bargento 2015 par les experts Magento de l'e...
Magento 2 à l’essai ! Conférence Bargento 2015 par les experts Magento de l'e...
 
SQL Debug avec Django @ PyConFr 2015
SQL Debug avec Django @ PyConFr 2015SQL Debug avec Django @ PyConFr 2015
SQL Debug avec Django @ PyConFr 2015
 
En route vers Active Directory 2012 R2 et au-delà
En route vers Active Directory 2012 R2 et au-delà En route vers Active Directory 2012 R2 et au-delà
En route vers Active Directory 2012 R2 et au-delà
 
En route vers Active Directory 2012 R2 et au-delà
En route vers Active Directory 2012 R2 et au-delà En route vers Active Directory 2012 R2 et au-delà
En route vers Active Directory 2012 R2 et au-delà
 
Des mises à jour? Emmenez votre application Stitch encore plus loin grâce aux...
Des mises à jour? Emmenez votre application Stitch encore plus loin grâce aux...Des mises à jour? Emmenez votre application Stitch encore plus loin grâce aux...
Des mises à jour? Emmenez votre application Stitch encore plus loin grâce aux...
 
iTunes Stats
iTunes StatsiTunes Stats
iTunes Stats
 
Symfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 PerformantSymfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 Performant
 
SSL 2011 : Présentation de 2 bases noSQL
SSL 2011 : Présentation de 2 bases noSQLSSL 2011 : Présentation de 2 bases noSQL
SSL 2011 : Présentation de 2 bases noSQL
 
Et pourquoi pas JEE ?
Et pourquoi pas JEE ?Et pourquoi pas JEE ?
Et pourquoi pas JEE ?
 
Deep Dive Performance , le In-Memory dans SQL Server
Deep Dive Performance , le In-Memory dans SQL ServerDeep Dive Performance , le In-Memory dans SQL Server
Deep Dive Performance , le In-Memory dans SQL Server
 
Pytong2015
Pytong2015Pytong2015
Pytong2015
 
Drools et les moteurs de règles
Drools et les moteurs de règlesDrools et les moteurs de règles
Drools et les moteurs de règles
 
Cl314 g formation-db2-pour-luw-nouvelles-fonctionnalites-et-considerations-po...
Cl314 g formation-db2-pour-luw-nouvelles-fonctionnalites-et-considerations-po...Cl314 g formation-db2-pour-luw-nouvelles-fonctionnalites-et-considerations-po...
Cl314 g formation-db2-pour-luw-nouvelles-fonctionnalites-et-considerations-po...
 
JUG Nantes - Telosys Tools - Avril 2014
JUG Nantes - Telosys Tools - Avril 2014 JUG Nantes - Telosys Tools - Avril 2014
JUG Nantes - Telosys Tools - Avril 2014
 
Telosys tools jug-nantes-2014-v1.2
Telosys tools jug-nantes-2014-v1.2Telosys tools jug-nantes-2014-v1.2
Telosys tools jug-nantes-2014-v1.2
 

Liquibase en action

  • 2. Plan 1. Motivations 2. API 3. Démo 4. Stratégies pour l'existant
  • 3. Motivations Modifier BDD en continu Industrialiser ses migrations Rapprocher DBA et DÉV
  • 4. Motivations Refactoring Modifier une portion de code, en maintenant la sémantique de celui-ci.
  • 5. Motivations Refactoring Principe de substitution de Liskov Couverture de tests ...
  • 6. Motivations Refactoring de BDD Modifier une partie du schéma (structures, données, triggers, procédures stockées...) tout en maintenant sa sémantique.
  • 7. Motivations Refactoring de BDD Contrats ? Tests ? Outillage ? http://databaserefactoring.com/
  • 8. Outillage ● Migrate4J BETA ● FlywayDB ● Liquibase
  • 9. @author: Nathan Voxland @license: Apache License 2.0 @source: Java (GITHUB) @currentVersion: 2.0.5 / 3.0.0.RC2 @supports: Oracle, MySQL, PostgreSQL, DB2, ...
  • 11. Historique DATABASECHANGELOG +---------------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------------+--------------+------+-----+---------+-------+ | ID | varchar(63) | NO | PRI | NULL | | | AUTHOR | varchar(63) | NO | PRI | NULL | | | FILENAME | varchar(200) | NO | PRI | NULL | | | DATEEXECUTED | datetime | NO | | NULL | | | ORDEREXECUTED | int(11) | NO | | NULL | | | EXECTYPE | varchar(10) | NO | | NULL | | | MD5SUM | varchar(35) | YES | | NULL | | | DESCRIPTION | varchar(255) | YES | | NULL | | | COMMENTS | varchar(255) | YES | | NULL | | | TAG | varchar(255) | YES | | NULL | | | LIQUIBASE | varchar(20) | YES | | NULL | | +---------------+--------------+------+-----+---------+-------+
  • 12. Changelog ~ point(s) d'entrée <databaseChangeLog xmlns...> <include file="my/company/migrations/9.1/changelog.xml" relativeToChangelogFile="true" /> <include file="my/company/migrations/10.0/changelog.xml" relativeToChangelogFile="true" /> <!-- [...] --> </databaseChangeLog>
  • 13. Changeset ~ unité de migration Identité = Path + ID + Auteur <changeSet id="exemple_de_changeset" author="florent.biville"> <comment>Vente en ligne de minitels</comment> <createTable tableName="minitels" remarks="EVOL-42"> <column name="id" type="INTEGER" /> </createTable> </changeSet> joué une seule fois sauf si runAlways="true" changements ensuite interdits sauf si runOnChange="true"
  • 14. Changeset ~ unité de migration Pourquoi XML* ? 1. indépendance vendor 2. rollback automatique 3. utilisation SQL possible ;-) * ou JSON/YAML/"SQL annoté"
  • 15. Changeset ~ rollback Rollback manuel (SQL ou tags Liquibase standards) <changeSet id="exemple_de_changeset" author="florent.biville"> <comment>Vente en ligne de minitels</comment> <sql>UPDATE Persons SET age = age + 42;</sql> <rollback> UPDATE Persons SET age = age - 42; </rollback> <!-- <rollback /> pour désactiver le rollback sur un changeset --> </changeSet>
  • 16. Preconditions Requête custom ou tags Liquibase standard <changeSet id="only_as_system" author="florent.biville"> <comment>Un grand pouvoir implique...</comment> <preConditions><!-- DRY: <xi:include href="../common/run_as_system.xml" /> --> <dbms type="oracle" /> <runningAs username="SYSTEM" /> </preConditions> <!-- danger! high voltage! --> </changeSet>
  • 17. Context Contexte paramétré à l'exécution <changeSet id="exemple_contexte" context="local,test" author="florent.biville"> <!-- danger! high voltage! --> </changeSet> il suffit qu'un seul des contextes corresponde
  • 19. Stratégies pour l'existant : initialisation Stratégie n°1 Stratégie n°2 Stratégie n°3 Définir 1 état de référence. Définir toutes les migrations à partir de cet état. Inclure un changeset de dump de la BDD de référence. Définir les migrations ensuite. Reconstruire toutes les migrations manuellement. Y ajouter ensuite un changeset de dump de données.
  • 20. Stratégies pour l'existant : initialisation Stratégie n°1 Stratégie n°2 Stratégie n°3 + simple - récupération / exécution du dump à la charge de chaque user + simple - couplage fort avec le vendor de BDD + indépendance vis- à-vis du vendor - fastidieux
  • 21. Stratégies pour l'existant : intégration Spring Maven CLI Utiliser le bean SpringLiquibase. Idéal pour déploiement sur PAAS. Utiliser le plugin Maven. Idéal pour la CI, aussi riche en options que le client CLI. Utiliser l'utilitaire en ligne de commandes. "Implémentation" de référence. autres modes disponibles: Ant, listener de Servlet
  • 23. ?