Introduction à la restauration de Liquibase

Introduction à la restauration de Liquibase

1. Vue d'ensemble

Dans nosprevious article, nous avons montré Liquibase comme un outil de gestion des schémas et des données de base de données.

Dans cet article, nous allons examiner plus en détail la fonction de restauration et comment nous pouvons annuler une opération Liquibase.

Naturellement, il s’agit d’une caractéristique essentielle de tout système de production.

2. Catégories de migrations Liquibase

Il existe deux catégories d’opérations Liquibase qui entraînent une génération différente d’instruction de restauration:

  • automatic, où la migration peut générer de manière déterministe les étapes nécessaires à la restauration

  • manual, où nous devons émettre une commande d'annulation car l'instruction de migration ne peut pas être utilisée pour identifier l'instruction de manière déterministe

Par exemple,the rollback of a “create table” statement would be to “drop” the created table. Cela peut être déterminé sans aucun doute et, par conséquent, l'instruction de restauration peut être générée automatiquement.

D'autre part,the rollback statement for a “drop table” command is not possible to be determined. Il n’est pas possible de déterminer le dernier état de la table et, par conséquent, l’instruction de restauration ne peut pas être générée automatiquement. These types of migration statements require a manual rollback instructions.

3. Rédaction d'une instruction d'annulation simple

Écrivons un ensemble de modifications simple qui créera une table lors de son exécution et ajoutons une instruction d'annulation à l'ensemble de modifications:


    
        
        
        
    
    
        
    

L'exemple ci-dessus fait partie de la première catégorie mentionnée ci-dessus. Il créera automatiquement une déclaration d'annulation si nous n'en ajoutons pas. Mais nous pouvons remplacer le comportement par défaut en créant notre instruction de restauration.

Nous pouvons exécuter la migration en utilisant la commande:

mvn liquibase:update

Après l'exécution, nous pouvons annuler l'action à l'aide de:

mvn liquibase:rollback

Cela exécute le segment d'annulation du jeu de modifications et devrait annuler la tâche effectuée au cours de la phase de mise à jour. Mais si nous émettons cette commande seule, la construction échouera.

La raison en est que nous ne spécifions pas la limite de restauration; la base de données sera complètement effacée en revenant à l'étape initiale. Par conséquent, il est obligatoire de définir l'une des trois contraintes ci-dessous pour limiter l'opération de restauration lorsque la condition est satisfaite:

  • rollbackTag

  • rollbackCount

  • rollbackDate

3.1. Revenir à une balise

Nous pouvons définir un état particulier de notre base de données comme une balise. Par conséquent, nous pouvons faire référence à cet état. Revenir au nom de balise «1.0» ressemble à ceci:

mvn liquibase:rollback -Dliquibase.rollbackTag=1.0

Ceci exécute les instructions de restauration de tous les changesets exécutés après la balise «1.0».

3.2. Recul par nombre

Ici, nous définissons combien de changesets nous devons être annulés. Si nous le définissons comme tel, le dernier jeu de modifications exécuté sera annulé:

mvn liquibase:rollback -Dliquibase.rollbackCount=1

3.3. Revenir à ce jour

Nous pouvons définir une cible d'annulation comme date. Par conséquent, tout jeu de modifications exécuté après ce jour sera annulé:

mvn liquibase:rollback "-Dliquibase.rollbackDate=Jun 03, 2017"

Le format de date doit être un format de données ISO ou doit correspondre à la valeur deDateFormat.getDateInstance() de la plate-forme en cours d'exécution.

4. Annuler les options du jeu de modifications

Voyons quelles sont les utilisations possibles de l'instruction d'annulation dans les ensembles de modifications.

4.1. Restauration de plusieurs déclarations

Une seule étiquette d'annulation peut contenir plus d'une instruction à exécuter:


    
        
        
    
    
        
        
    
    
        
        
    

Ici, nous déposons deux tables dans la même balise de restauration. Nous pouvons également répartir la tâche sur plusieurs déclarations.

4.2. Balises de restauration multiples

Dans un changeset, nous pouvons avoir plusieurs balises de restauration. Ils sont exécutés dans l'ordre d'apparition dans changeset:


    
        
        
    
    
        
        
    
    
        
    
    
        
    

4.3. Faire référence à un autre ensemble de modifications pour la restauration

Nous pouvons nous référer à un autre ensemble de modifications, éventuellement au jeu de modifications d'origine, si nous souhaitons modifier certains détails de la base de données. Cela réduira la duplication de code et pourra annuler correctement les modifications effectuées:


    
    
    

4.4. Balise de restauration vide

Par défaut, Liquibase essaie de générer un script d'annulation si nous ne l'avons pas fourni. Si nous devons casser cette fonctionnalité, nous pouvons avoir une balise d'annulation vide afin que l'opération d'annulation ne soit pas annulée:


    
        
        
        
    
    

5. Options de la commande de restauration

En plus de restaurer une base de données à un état antérieur, Liquibase peut être utilisé de différentes manières. C’est-à-dire, générer le code SQL de restauration, créer un script de restauration futur, et enfin, nous pouvons tester la migration et la restauration, en une seule étape.

5.1. Générer un script de restauration

Comme pour la restauration, nous avons trois options en main pour générer une restauration SQL. Ce sont:

  • rollbackSQL<tag> - un script pour restaurer la base de données vers la balise mentionnée

  • rollbackToDateSQL<date/time> - un script SQL pour restaurer la base de données à l'état à la date / heure mentionnée

  • rollbackCountSQL<value> - un script SQL pour restaurer la base de données à l'état mentionné par le nombre d'étapes avant

Voyons l'un des exemples en action:

mvn liquibase:rollbackCountSQL 2

5.2. Générer un futur script de restauration

Cette commande génère les commandes SQL d'annulation nécessaires pour amener la base de données à l'état actuel à partir de l'état auquel les ensembles de modifications pouvant être exécutés à ce moment sont terminés. Cela sera très utile s'il est nécessaire de fournir un script d'annulation pour un changement que nous sommes sur le point d'effectuer:

Cela sera très utile s'il est nécessaire de fournir un script d'annulation pour un changement que nous sommes sur le point d'effectuer:

mvn liquibase:futureRollbackSQL

5.3. Exécuter la restauration des tests de mise à jour

Cette commande exécute la mise à jour de la base de données, puis annule les ensembles de modifications pour amener la base de données à l'état actuel. Les annulations futures et les révisions des tests de mise à jour ne modifient pas la base de données actuelle une fois l'exécution terminée. Mais l'annulation de test de mise à jour effectue la migration réelle, puis l'annule.

Ceci peut être utilisé pour tester l'exécution des modifications de mise à jour sans changer de manière permanente la base de données:

mvn liquibase:updateTestingRollback

6. Conclusion

Dans ce rapide didacticiel, nous avons exploré certaines fonctionnalités de ligne de commande et de jeu de modifications de la fonctionnalité de restauration de Liquibase.

Comme toujours, le code source peut être trouvéover on GitHub.