在Oracle上部署Liquibase脚本时,我经常遇到问题,因为在部署之前我没有简单的方法来运行它们。它们总是在新的H2 DB上运行良好,但是当我在管道中部署时,我经常遇到基本问题。
我希望在部署之前对我的脚本执行一些质量检查,通常作为构建的一部分。有一个简单的方法吗?例如,像Oracle一样检查列名和表名的基本内容对于Oracle而言并不太长。因为我不经常这样做,所以我倾向于忘记这个限制,当我在Oracle上部署时,我得到了一个惊喜..
谢谢!
答案 0 :(得分:2)
我找到了一种方法来解析我创建的最新Liquibase文件,并执行一些基本检查。我想这可以扩展到更高级的检查,但这已经相当不错了。这里有4个测试,使用AssertJ进行断言
as_text()
答案 1 :(得分:0)
如果在更新过程中发生任何问题,您可以尝试以下批处理,以便将数据库状态回滚到日期/时间之前。 您可以在测试范围内使用maven运行此批处理
@ECHO OFF
for /F "usebackq tokens=1,2 delims==" %%i in (`wmic os get LocalDateTime /VALUE 2^>NUL`) do if '.%%i.'=='.LocalDateTime.' set ldt=%%j
set ldt=%ldt:~0,4%-%ldt:~4,2%-%ldt:~6,2%T%ldt:~8,2%:%ldt:~10,2%:%ldt:~12,2%
java -jar path/to/liquibase.jar update
IF ERRORLEVEL 0 GOTO ProcessError
:ProcessError
ECHO error while executing liquibase scripts
ECHO Rolling back to state at %ldt%
java -jar path/to/liquibase.jar rollbackToDateSQL %ldt%
我正在使用liquibase-core-3.3.2.jar& ojdbc5-11.1.0.7.0.jar,包含以下liquibase.properties文件。
#liquibase.properties
driver: oracle.jdbc.OracleDriver
classpath: path/to/ojdbc.jar
url: jdbc:oracle:thin:@****:port:SID
username: OWNER
password: ****
changeLogFile:databaseChangeLog.xml
logLevel: debug
答案 2 :(得分:0)
您可能已经准备好开始查看内部使用Liquibase的Datical DB等商业解决方案,但添加了预测功能,模拟将更改应用于抽象的内存数据库模型。我们还有一个规则引擎,可以对数据库和更改日志进行非常复杂的检查。完全披露 - 我是Datical的员工。