Git Product home page Git Product logo

learn-liquibase's Introduction

learn-liquibase

Подготовка базы данных

  1. Стянуть Docker образ
    docker pull oracleinanutshell/oracle-xe-11g
    
  2. Запустить образ
    docker run -d -p 49161:1521 --name oracle-test-db oracleinanutshell/oracle-xe-11g
    
  3. Использовать подключение
    hostname=localhost
    port=49161
    sid=xe
    username=system
    password=oracle
  4. Установить Oracle Jdbc
    mvn install:install-file -Dfile=D:/ojdbc8-12.2.0.1.jar -DgroupId=com.oracle -DartifactId=ojdbc8 -Dversion=12.2.0.1 -Dpackaging=jar
    

Сборка/накат/откат для тегов в каждом файле

  1. Собрать и накатить БД

    mvn clean package liquibase:update -Dliquibase.contexts=dev -Dliquibase.changeLogFile=version-in-every-file/changelog.xml -Dliquibase.username=system -Dliquibase.password=oracle -Dliquibase.url=jdbc:oracle:thin:@//localhost:49161/xe
    
  2. Собрать и откатить версию 1.0.0

    mvn clean package liquibase:rollback -Dliquibase.rollbackTag=1.0.0  -Dliquibase.contexts=dev -Dliquibase.changeLogFile=version-in-every-file/changelog.xml -Dliquibase.username=system -Dliquibase.password=oracle -Dliquibase.url=jdbc:oracle:thin:@//localhost:49161/xe
    
  3. Собрать и откатить версию 1.1.0

    mvn clean package liquibase:rollback -Dliquibase.rollbackTag=1.1.0  -Dliquibase.contexts=dev -Dliquibase.changeLogFile=version-in-every-file/changelog.xml -Dliquibase.username=system -Dliquibase.password=oracle -Dliquibase.url=jdbc:oracle:thin:@//localhost:49161/xe
    
  4. Собрать и откатить версию 1.2.0

    mvn clean package liquibase:rollback -Dliquibase.rollbackTag=1.2.0  -Dliquibase.contexts=dev -Dliquibase.changeLogFile=version-in-every-file/changelog.xml -Dliquibase.username=system -Dliquibase.password=oracle -Dliquibase.url=jdbc:oracle:thin:@//localhost:49161/xe
    

Содержимое DATABASECHANGELOG после наката version-in-every-file.png

Содержимое DATABASECHANGELOG после отката к версии 1.0.0 version-in-every-file-after-rollback.png

Сборка/накат/откат для тегов в одном файле в папке с версией

  1. Собрать и накатить БД

    mvn clean package liquibase:update -Dliquibase.contexts=dev -Dliquibase.changeLogFile=version-by-directory/changelog.xml -Dliquibase.username=system -Dliquibase.password=oracle -Dliquibase.url=jdbc:oracle:thin:@//localhost:49161/xe
    
  2. Собрать и откатить версию 1.0.0

    mvn clean package liquibase:rollback -Dliquibase.rollbackTag=1.0.0  -Dliquibase.contexts=dev -Dliquibase.changeLogFile=version-by-directory/changelog.xml -Dliquibase.username=system -Dliquibase.password=oracle -Dliquibase.url=jdbc:oracle:thin:@//localhost:49161/xe
    
  3. Собрать и откатить версию 1.1.0

    mvn clean package liquibase:rollback -Dliquibase.rollbackTag=1.1.0  -Dliquibase.contexts=dev -Dliquibase.changeLogFile=version-by-directory/changelog.xml -Dliquibase.username=system -Dliquibase.password=oracle -Dliquibase.url=jdbc:oracle:thin:@//localhost:49161/xe
    
  4. Собрать и откатить версию 1.2.0

    mvn clean package liquibase:rollback -Dliquibase.rollbackTag=1.2.0  -Dliquibase.contexts=dev -Dliquibase.changeLogFile=version-by-directory/changelog.xml -Dliquibase.username=system -Dliquibase.password=oracle -Dliquibase.url=jdbc:oracle:thin:@//localhost:49161/xe
    

Содержимое DATABASECHANGELOG после наката version-by-directory.png

Содержимое DATABASECHANGELOG после отката к версии 1.0.0 version-by-directory-after-rollback.png

Остановка контейнера

docker container ls 
docker container stop oracle-test-db

Резюме

Liquibase для отката использует механизм тегов.

Тег указывается следующим образом

<changeSet context="dev" author="ezhov" id="rollback-003-create-table-test_table_two-dev">
    <tagDatabase tag="1.2.0"/>
</changeSet>

Откат происходит до этого тега.

Этот проект воспроизводит следующий пример отката:

  1. Разрабатывается приложение с версией 1.0.0
  2. Затем приложение с версией 1.1.0
  3. Затем приложение с версией 1.2.0

При указании конкретной версии для отката происходит откат указанной версии, то есть не ДО версии такой-то, а ВКЛЮЧИТЕЛЬНО версию такую-то.
Это позволяет избежать путаницы в случае отката после поставки.

Пример сценария:

  • Поставилась версия 1.1.0
  • Необходимо откатить только что поставленную версию из-за ошибок
  • Указывается для отката версия 1.1.0

Для возможности использования такого сценария отката тэг для отката необходимо указывать ПЕРЕД выполняемыми changeSet-ами.

learn-liquibase's People

Contributors

ezhov-da avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.