Pengembalian Liquibase tidak berfungsi di Sprintboot 2.0

Bagaimana cara kerja liquibase rollback dengan aplikasi springboot? Sangat menghargai masukan Anda.

Inilah yang saya coba - Saya membuat TableA dan TableB di Oracle dalam satu set perubahan.

TableB sudah ada di database, saya berharap liquibase akan mengembalikan TableA karena perubahan gagal saat membuat TableB tetapi liquibase membuat TableA dan gagal dengan kesalahan di bawah ini dan tidak pernah menjalankan blok rollback, yang aneh:

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

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

person Srinivas    schedule 06.10.2019    source sumber


Jawaban (1)


Sepertinya Anda memiliki persepsi yang salah tentang kegunaan rollback. Ini bukan untuk "mengembalikan satu transaksi besar dalam keseluruhan changeSet". Ini untuk mengembalikan beberapa keadaan skema masa lalu.

Menurut dokumentasi Oracle

Oracle Database mengeluarkan COMMIT implisit sebelum dan sesudah pernyataan bahasa definisi data (DDL).

Jadi setelah setiap eksekusi pernyataan create table, Oracle melakukan transaksi.

Jika kesalahan terjadi selama eksekusi changeSet, liquibase hanya dapat melakukan rollback pada transaksi yang gagal, dan hal tersebut berhasil dilakukan.

Lihat utas ini

Liquibase tidak secara otomatis mengembalikan perubahan yang dibuat selama penerapan jika terjadi kesalahan. Sebaliknya, ini dapat mengembalikan database ke status skema sebelumnya saat Anda memintanya. Dalam beberapa kasus, ia dapat melakukannya tanpa Anda secara eksplisit mengatakan cara melakukan rollback.

Akan lebih baik untuk menganggap perintah rollback di Liquibase sebagai 'batalkan penerapan' daripada rollback transaksional.

Baca juga artikel liquibase-rollback ini tentang cara menggunakan rollback.

person htshame    schedule 07.10.2019