回滚在使用 liquibase 的 oracle 中不起作用
Rollback is not working in oracle using liquibase
我是 Liquibase 的新手。我可以使用 liquibase 更新(已创建 table 的变更集)到 Oracle 数据库。在进行更新时,我还创建了标签。但是当我尝试使用标签回滚更新的更改(即删除创建的 table)时。 table 没有被丢弃。
我正在使用 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" 。但是尚未创建删除 table 的查询。
找到下面的代码。
-- *********************************************************************
-- 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
请帮我解决问题。
据我所知,它似乎按设计工作。您的更新日志 table 为空,因此尚未部署任何更改。因此,没有要回滚的更改。
根据 Liquibase 文档:
http://www.liquibase.org/documentation/rollback.html
Tag
Specifying a tag to rollback to will roll back all change-sets that
were executed against the target database after the given tag was
applied.
但是你的createTable动作并不是在标签"checkpoint"之后,而是用这个标签本身标记的。如果你想回滚这个动作,你需要在 createTable 之前在单独的变更集中有一个 tagDatabase。
另外,为什么要使用空的更新日志进行回滚?它应该包含您用于更新命令的更改(创建 table,等等)。
我是 Liquibase 的新手。我可以使用 liquibase 更新(已创建 table 的变更集)到 Oracle 数据库。在进行更新时,我还创建了标签。但是当我尝试使用标签回滚更新的更改(即删除创建的 table)时。 table 没有被丢弃。
我正在使用 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" 。但是尚未创建删除 table 的查询。
找到下面的代码。
-- *********************************************************************
-- 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
请帮我解决问题。
据我所知,它似乎按设计工作。您的更新日志 table 为空,因此尚未部署任何更改。因此,没有要回滚的更改。
根据 Liquibase 文档: http://www.liquibase.org/documentation/rollback.html
Tag
Specifying a tag to rollback to will roll back all change-sets that were executed against the target database after the given tag was applied.
但是你的createTable动作并不是在标签"checkpoint"之后,而是用这个标签本身标记的。如果你想回滚这个动作,你需要在 createTable 之前在单独的变更集中有一个 tagDatabase。
另外,为什么要使用空的更新日志进行回滚?它应该包含您用于更新命令的更改(创建 table,等等)。