Рубрики
Без рубрики

Введение в откат ликвидной базы

Узнайте, как использовать функцию отката платформы Liquibase.

Автор оригинала: baeldung.

1. Обзор

В нашей предыдущей статье мы показали Liquibase как инструмент для управления схемами баз данных и данными.

В этой статье мы подробнее рассмотрим функцию отката и то, как мы можем отменить операцию Liquibase.

Естественно, это важнейшая особенность любой производственной системы.

2. Категории миграций ликвидной базы

Существует две категории операций с ликвидной базой, в результате чего создается другой оператор отката:

  • автоматический , где миграция может детерминированно генерировать шаги, необходимые для отката
  • руководство , где нам нужно выполнить команду отката, поскольку инструкция миграции не может быть использована для детерминированной идентификации оператора

Например, откат инструкции “создать таблицу” будет заключаться в “ отбрасывании” созданной таблицы . Это можно определить без сомнения, и поэтому оператор отката может быть сгенерирован автоматически.

С другой стороны, оператор отката для команды “drop table” невозможно определить . Невозможно определить последнее состояние таблицы, и поэтому оператор отката не может быть автоматически сгенерирован. Для этих типов инструкций миграции требуются инструкции по откату вручную.

3. Написание простого заявления об откате

Давайте напишем простой набор изменений, который создаст таблицу при выполнении и добавит оператор отката в набор изменений:


    
        
        
        
    
    
        
    

Приведенный выше пример относится к первой категории, упомянутой выше. Он автоматически создаст оператор отката, если мы его не добавим. Но мы можем переопределить поведение по умолчанию, создав наш оператор отката.

Мы можем запустить миграцию с помощью команды:

mvn liquibase:update

После выполнения мы можем откатить действие с помощью:

mvn liquibase:rollback

Это выполняет сегмент отката набора изменений и должно вернуть задачу, выполненную на этапе обновления. Но если мы выполним эту команду в одиночку, сборка завершится неудачей.

Причина этого в том, что мы не указываем предел отката; база данных будет полностью уничтожена при откате на начальный этап. Поэтому необходимо определить одно из трех приведенных ниже ограничений, чтобы ограничить операцию отката при выполнении условия:

  • тег отката
  • rollbackCount
  • дата отката

3.1. Откат к тегу

Мы можем определить конкретное состояние нашей базы данных как тег. Поэтому мы можем вернуться к этому состоянию. Откат к имени тега “1.0” выглядит следующим образом:

mvn liquibase:rollback -Dliquibase.rollbackTag=1.0

При этом выполняются инструкции отката всех наборов изменений, выполненных после тега “1.0”.

3.2. Откат по количеству

Здесь мы определяем, сколько наборов изменений нам нужно откатить. Если мы определим его как один, то последнее выполнение набора изменений будет откатано:

mvn liquibase:rollback -Dliquibase.rollbackCount=1

3.3. Откат на сегодняшний день

Мы можем установить цель отката в качестве даты, поэтому любые изменения, внесенные после этого дня, будут откатаны:

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

Формат даты должен быть форматом данных ISO или должен соответствовать значению DateFormat.getDateInstance() исполняющей платформы.

4. Параметры Набора Изменений Отката

Давайте рассмотрим, как можно использовать оператор отката в наборах изменений.

4.1. Откат нескольких операторов

Один тег отката может содержать более одной инструкции для выполнения:


    
        
        
    
    
        
        
    
    
        
        
    

Здесь мы помещаем две таблицы в один и тот же тег отката. Мы также можем разделить задачу на несколько операторов.

4.2. Несколько Тегов Отката

В наборе изменений у нас может быть несколько тегов отката. Они выполняются в порядке появления в наборе изменений:


    
        
        
    
    
        
        
    
    
        
    
    
        
    

4.3. Обратитесь к другому набору изменений для отката

Мы можем обратиться к другому набору изменений, возможно, к исходному набору изменений, если мы собираемся изменить некоторые детали базы данных. Это уменьшит дублирование кода и позволит корректно отменить внесенные изменения:


    
    
    

4.4. Пустой Тег Отката

По умолчанию Liquibase пытается сгенерировать сценарий отката, если мы его не предоставили. Если нам нужно сломать эту функцию, у нас может быть пустой тег отката, чтобы операция отката не была отменена:


    
        
        
        
    
    

5. Параметры команды отката

Помимо отката базы данных в предыдущее состояние, Liquibase можно использовать многими различными способами. Это создание SQL отката, создание будущего сценария отката и, наконец, мы можем протестировать миграцию и откат, как в один шаг.

5.1. Создание Сценария Отката

Так же, как и откат, у нас есть три варианта создания SQL отката. Это:

  • rollbackSQL – скрипт для отката базы данных к указанному тегу
  • rollbackToDateSQL <дата/время> – SQL-скрипт для отката базы данных в состояние на указанную дату/время
  • rollbackCountSQL – SQL-скрипт для отката базы данных в состояние, указанное числом шагов до

Давайте рассмотрим один из примеров в действии:

mvn liquibase:rollbackCountSQL 2

5.2. Создание Сценария Отката в Будущем

Эта команда генерирует необходимые команды SQL отката для приведения базы данных в текущее состояние из состояния, в котором завершены наборы изменений, имеющие право на запуск в данный момент. Это будет очень полезно, если возникнет необходимость предоставить сценарий отката для изменения, которое мы собираемся выполнить:

Это будет очень полезно, если возникнет необходимость предоставить сценарий отката для изменения, которое мы собираемся выполнить:

mvn liquibase:futureRollbackSQL

5.3. Запуск отката тестирования обновлений

Эта команда выполняет обновление базы данных, а затем откатывает наборы изменений, чтобы привести базу данных в текущее состояние. Как будущий откат, так и тестирование обновления откат не изменяет текущую базу данных после завершения выполнения. Но откат тестирования обновления выполняет фактическую миграцию, а затем откатывает ее обратно.

Это можно использовать для проверки выполнения изменений обновления без постоянного изменения базы данных:

mvn liquibase:updateTestingRollback

6. Заключение

В этом кратком руководстве мы рассмотрели некоторые функции командной строки и набора изменений функции отката Liquibase.

Как всегда, исходный код можно найти на GitHub .