我们使用liquibase和oracle。所以我们有一些包含程序的包。 在我们的例子中,changelog结构如下所示:
master.xml
|
| release1
| |
| release-maser.xml
| release2
| |
| release-maser.xml
| softObjects
| |
| package-master.xml
| packages
| |
| somePackage.pkb
| somePackage.pks
使用runOnChange = false更改“版本”内的集合,使用runOnChange = true更改“softObjects”(可以创建使用的CREATE OR REPLACE),就像在最佳实践中一样:
尝试为存储过程维护单独的更改日志并使用 runOnChange =”真”。这面旗帜迫使LiquiBase检查是否 变更集已被修改。如果是这样,liquibase会再次执行更改。
所以每次更新都会在“release”中设置一些“delta”更改集,然后重新安装所有已更改的“softObjects”,通常情况下一切正常。
但如果我需要设置新数据库,我会遇到问题: 在第二版中的更改集中我使用somePackage(v1),但在下一个版本中我需要更改逻辑/ API somePackage,因此我将获得一些不能在以前创建的更改集中使用的包(v2)。所以现在我有更改集,在更新时会尝试使用错误的包版本。
为了避免这种情况,我可以直接在release文件夹中添加软对象,而不是在创建它时runOnChange = true。当我需要更改它时,我应该将以前版本的文件复制到我的新版本并在COPY中进行更改。
这种方法有一些缺点:
我的错误是什么?如果可能更改此对象,我应该如何使用“softObjects”?