首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Liquibase回滚在Sprintboot 2.0中不起作用

Liquibase回滚在Sprintboot 2.0中不起作用
EN

Stack Overflow用户
提问于 2019-10-06 22:22:05
回答 1查看 280关注 0票数 1

liquibase回滚是如何与springboot应用程序一起工作的?将非常感谢您的意见。

下面是我尝试过的内容--我在一个变更集中创建了TableA和TableB。

TableB已经存在于数据库中,我期望liquibase回滚TableA,因为在创建TableB时变更集失败,但liquibase创建TableA失败,并出现以下错误,并且从不执行回滚块,这很奇怪:

代码语言:javascript
复制
Caused by: liquibase.exception.DatabaseException: ORA-00955: name is already used by an existing object

Liquibase配置:

代码语言:javascript
复制
<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

代码语言:javascript
复制
CREATE TABLE TABLEA
    (
        TEST_COL       VARCHAR2(100)
    );

    dml.sql 

    CREATE TABLE TABLEB
    (
        TEST_COL       VARCHAR2(100)
    );
EN

回答 1

Stack Overflow用户

发布于 2019-10-07 21:27:39

看起来你对rollback的用途有一个错误的认识。它是,而不是,意思是“在整个changeSet中恢复一个大事务”。它用于恢复一些过去的模式状态。

根据Oracle documentation

DDL数据库在任何数据定义语言(

)语句前后发出隐式COMMIT。

因此,在每次执行create table语句之后,Oracle都会提交事务。

如果错误发生在changeSet的执行过程中,liquibase只能回滚失败的事务。

查看此thread

如果出现错误,

Liquibase不会自动回滚在部署过程中所做的更改。相反,它可以在您要求时将数据库回滚到以前的模式状态。在某些情况下,它可以做到这一点,而无需您显式地说明如何执行回滚。

最好将Liquibase中的rollback命令视为“撤销部署”,而不是事务性回滚。

另外,请查看这篇关于如何使用回滚的liquibase-rollback文章。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58258170

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档