Откат Liquibase не работает в Sprintboot 2.0 - PullRequest
1 голос
/ 06 октября 2019

Как работает откат жидкостной базы при использовании 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

Конфигурация Liquibase:

<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)
    );

1 Ответ

1 голос
/ 07 октября 2019

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

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

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

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

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

Проверьте этот поток

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

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

Кроме того, ознакомьтесь с этой жидкостной базой отката о том, как использовать откаты.

...