使用liquibase在oracle中回滚不起作用

时间:2016-02-12 06:56:01

标签: oracle maven liquibase

我是Liquibase的新手。我可以使用liquibase更新(具有create table的changeset)到Oracle数据库。在做更新时我也创建了标签。但是当我尝试使用标记回滚更新的更改(即删除创建的表)时。桌子没有丢弃。

我正在使用liquibase-maven插件3.4.2。以下是maven中的代码。

 <plugins>
  <plugin>
  <groupId>org.liquibase</groupId>
  <artifactId>liquibase-maven-plugin</artifactId>
  <version>3.4.2</version>
   <executions>
   <execution>
    <id>execution1</id>
      <phase>process-resources</phase>
      <configuration>

                 <changeLogFile>src/main/resources/changelog.xml</changeLogFile>  
                 <rollbackTag>checkpoint</rollbackTag>  

                     <driver>oracle.jdbc.OracleDriver</driver>
                    <url>jdbc:oracle:thin:@10.86.24.2:1521:claim</url>
                    <username>Test</username>
                    <password>Test</password>  


        </configuration>
         <goals>

           <goal>rollback</goal>   
           <!--  <goal>rollbackSQL</goal>   -->

         </goals>
    </execution> 
    </executions>
</plugin>

在回滚数据库时,下面是我的changelog.xml。

 <?xml version="1.0" encoding="UTF-8"?>
 <databaseChangeLog xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.liquibase.org/xml/ns/dbchangelog"></databaseChangeLog>

我试过“rollbackSQL”。但是还没有创建删除表的查询。

找到以下代码。

-- *********************************************************************
-- Rollback to 'checkpoint' Script
-- *********************************************************************
-- Change Log: src/main/resources/changelog.xml
-- Ran at: 2/10/16 6:24 PM
-- Against: TEST@jdbc:oracle:thin:@10.86.24.2:1521:claim
-- Liquibase version: 3.4.2
-- *********************************************************************

SET DEFINE OFF;

-- Lock Database
UPDATE DATABASECHANGELOGLOCK SET LOCKED = 1, LOCKEDBY = 'KannanSDTW864', LOCKGRANTED = to_timestamp('2016-02-10 18:24:08.593', 'YYYY-MM-DD HH24:MI:SS.FF') WHERE ID = 1 AND LOCKED = 0;

-- Release Database Lock
UPDATE DATABASECHANGELOGLOCK SET LOCKED = 0, LOCKEDBY = NULL, LOCKGRANTED = NULL WHERE ID = 1;

Entries in the DATABASECHANGELOG table

请帮我解决问题。

2 个答案:

答案 0 :(得分:0)

据我所知,它似乎按设计工作。您有一个空的更改日志表,因此未部署任何更改。因此,回滚没有变化。

答案 1 :(得分:0)

根据Liquibase doc: http://www.liquibase.org/documentation/rollback.html

  

标签

     

指定要回滚的标记将回滚所有更改集   在给定标记之后对目标数据库执行   应用

但是您的createTable操作不在标记“checkpoint”之后,而是用此标记本身标记。如果要回滚此操作,则需要在createTable之前在单独的变更集中设置tagDatabase。

另外,为什么要使用空的更改日志进行回滚?它应包含您用于更新命令的更改(创建表等)。