oracle Flyway迁移-在应用启动时失败,但在从intellij触发时工作

cvxl0en2  于 2022-11-03  发布在  Oracle
关注(0)|答案(1)|浏览(128)

我有一个Sping Boot 项目,其中包含了大约500个flyway迁移文件,这些文件都是针对oracle sql数据库(19 c)运行的。在Intellij Idea中,我可以使用mvn flyway:migrate成功运行迁移脚本。但是,当在应用程序启动时执行相同的操作时,它运行了大约70%的迁移文件,然后崩溃并出现以下错误:

Migration V6_2021.06__XXXXXXXXXXXXXXXXX.sql failed
--------------------------------------------------------------------------------
SQL State  : 42000
Error Code : 4098
Message    : ORA-04098: trigger 'XXXXXXXXXXX' is invalid and failed re-validation
Location   : db/migration/V6_2021.06__XXXXXXXXXXXXXXXXX.sql 
Line       : 7
Statement  : INSERT INTO....

我不想粘贴错误消息的其余部分,因为我认为它是不相关的,因为当从IDE迁移时,完全相同的脚本被成功执行。至于我的application.properties文件,它看起来像这样:

spring.datasource.url=jdbc:oracle:thin:@//XXXX:1521/XXXX
spring.datasource.username=XXXX
spring.datasource.password=XXXX
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver

spring.flyway.driver-class-name=oracle.jdbc.OracleDriver
spring.flyway.url=jdbc:oracle:thin:@//XXXX:1521/XXXX
spring.flyway.user=XXXX
spring.flyway.password=XXXX
spring.flyway.table=schema_version

......但是,我想这是可以的,因为它执行了大约300个文件,然后崩溃了。问题是--为什么同样的脚本在IDE内部迁移时工作,而在应用程序启动时自动运行时失败?要寻找什么?要检查什么?我实在是没有主意了。
编辑:也添加我的flyway-maven-plugin配置:

<plugin>
   <groupId>org.flywaydb</groupId>
   <artifactId>flyway-maven-plugin</artifactId>
   <version>4.2.0</version>
   <configuration>
      <driver>oracle.jdbc.OracleDriver</driver>
      <url>jdbc:oracle:thin:@//XXXX:1521/XXXX</url>
      <user>XXXX</user>
      <password>XXXX</password>
      <baselineOnMigrate>true</baselineOnMigrate>
      <baselineVersion>1</baselineVersion>
   </configuration>
</plugin>
a6b3iqyw

a6b3iqyw1#

修复了。问题是一些迁移脚本缺少“/”符号来分隔包含在单个文件中的多个触发器定义。添加缺少的斜杠解决了在应用程序启动时应用迁移的问题。为什么直接从IDE运行时它们能正确工作对我来说仍然是个谜。值得一提的是,一个脚本在触发器定义之间有“/”,但它前面有两个空格,显然,这也是不正确的,因为当我删除空间,它开始像一个魅力的工作。

相关问题