Откат Liquibase не работает в Sprintboot 2.0

Как работает откат liquibase с приложением springboot? Был бы признателен за ваш вклад.

Вот что я пробовал: я создаю TableA и TableB в Oracle в наборе изменений.

TableB уже существует в базе данных, я ожидаю, что liquibase откатит TableA, так как набор изменений не работает при создании TableB, но liquibase создает TableA и завершается с ошибкой ниже и никогда не выполняет блок отката, что странно:

Caused by: liquibase.exception.DatabaseException: ORA-00955: name is already used by an existing object

Конфигурация Ликвибазы:

<changeSet id="rollback" author="test_user">
<validCheckSum>any</validCheckSum>

    <sqlFile path="db/changelog/changes/DML/ddl.sql"/>
    <sqlFile path="db/changelog/changes/DML/ddl.sql"/>

    <rollback> drop table TABLEA;</rollback>
    <rollback> drop table TABLEB;</rollback>
</changeSet>

ddl.sql

CREATE TABLE TABLEA
    (
        TEST_COL       VARCHAR2(100)
    );

    dml.sql 

    CREATE TABLE TABLEB
    (
        TEST_COL       VARCHAR2(100)
    );

person Srinivas    schedule 06.10.2019    source источник


Ответы (1)


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

Согласно документации

База данных Oracle выдает неявный оператор COMMIT до и после любого оператора языка определения данных (DDL).

Таким образом, после выполнения каждого оператора create table Oracle фиксирует транзакцию.

Если ошибка возникает во время выполнения changeSet, liquibase может откатить только неудачную транзакцию, что она и делает.

Ознакомьтесь с этой веткой

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

Было бы лучше думать о команде отката в Liquibase как об «отмене развертывания», а не об откате транзакции.

Кроме того, ознакомьтесь с этой liquibase-rollback статьей о том, как использовать откаты.

person htshame    schedule 07.10.2019