2017-10-18 97 views
0

我已经能够做到回滚只有架构更改标记,但我遇到了我在存储过程中混不工作的情况。
我正在对Oracle数据库使用SQL更改日志。下面是这种情况:回滚到标签不工作,如果应用到runOnChange标签变更集

版本1.0.0
我有一个脚本R-1.0.0.sql包含创建一个表,并创建一个存储过程的脚本proc.sql。 proc变更集被标记为runOnChange = true。
我很高兴与变化,我与标签标签1.0.0
数据库到底DATABASECHANGELOG表显示:
1 - R-1.0.0.sql执行的
2 - proc.sql- EXECUTED-(标签)1.0.0

版本2.0.0
我有一个脚本R-2.0.0是重命名列,我也更新proc.sql与新的列名。运行在此之后,DATABASECHANGELOG是:
1 - R-1.0.0.sql执行的
4 - proc.sql-RERAN-(标签)1.0.0
3 - R-2.0.0.sql执行的

您注意到重新运行PROC脚本有一个新的号码,但它仍然保持了1.0.0标签

如果现在我想回滚到标签1.0.0,ROLLBACK命令不执行任何操作,因为标签1.0.0对应于日志中的最新更改。

这似乎是设计。有没有不同的方式来组织我的更改,使其工作?

+0

根据此线程,我应该能够为存储过程指定一个不同的更改日志表。 http://forum.liquibase.org/topic/configurable-databasechangelog-table-name。我仍在努力研究命令行。 –

回答

0

我找到了一个基于上面链接的文章的解决方案。由于在我的环境中的限制,我没有一个简单的方法来传递Java环境变量。

@echo off 

IF NOT DEFINED JAVA_OPTS set JAVA_OPTS= 
set JAVA_OPTS=-Dliquibase.databaseChangeLogTableName=STOREDPROCCHANGELOG %JAVA_OPTS% 

liquibase %* 

它设置在由Liquibase批处理文件中使用的变量参数,然后调用批处理文件传:我结束了安装自定义批处理文件,内容如下(我把它命名为Liquibase-sp.bat)整个命令行。
在部署期间,我通过调用“liquibase”来应用模式更改,然后通过调用“liquibase-sp”来应用存储的proc更改。模式更改记录在默认的DATABASECHANGELOG表中,而proc更改记录在单独的STOREDPROCCHANGELOG表中。所有标记完成调用“liquibase”,因此它使用默认表,并且只有模式更改使用版本标记。

回滚工作在我提到的场景。

我希望看到另外一个问题,如果我有任何更改,发布2.0.0。当我使用2.0.0标记数据库时,最后一个变更集的标记从1.0.0修改为2.0.0。这意味着任何回滚标签1.0.0都会失败。尽管如此,我并不担心,但有一些程序上的解决方法。