在空架构上找到Flyway非空架构

时间:2019-01-29 11:55:11

标签: java spring-boot oracle11g flyway

我正在尝试使用Flyway 4.2.0 + Oracle 11g

来实现数据库迁移

我有这个空的架构:

enter image description here

当我尝试迁移时,Flyway说:

  

由于:org.flywaydb.core.api.FlywayException:发现非空   没有元数据表的模式“ PASHA”!使用baseline()或设置   baselineOnMigrate为true以初始化元数据表。

这是配置:

@Bean(initMethod = "migrate")
Flyway flyway() {
    Flyway flyway = new Flyway();
    flyway.setBaselineOnMigrate(false);
    flyway.setSchemas("PASHA");
    flyway.setLocations("classpath:db/migration/oracle");
    flyway.setDataSource("jdbc:oracle:thin:@host:1521:test", "login", "password");
    return flyway;
}

为什么会收到此消息?我的基地是空的。

3 个答案:

答案 0 :(得分:1)

您需要让Flyway自己创建架构(这意味着不应事先创建“ PASHA”架构),或为现有架构建立基线(意味着使用flyway.setBaselineOnMigrate(true)来设置配置)。

基本上,Flyway尝试创建一个已经存在的架构(在您的示例中为“ PASHA”)。

答案 1 :(得分:1)

Flyway本身使用查询来检查架构是否为空。

In the case of oracle, the query is

SELECT * FROM ALL_OBJECTS WHERE OWNER = ?

执行该查询(用您的所有者代替?),然后查看它是否返回内容(确实如此)。


例如,尚未清除的LOB在那里显示。如果是这样,请尝试:

purge recyclebin;

,查询现在应该为空。

答案 2 :(得分:0)

添加所有这些帮助。但是没有弹簧的人实际上是成功的把戏!虽然很傻,但确实有效!

spring.flyway.baselineOnMigrate=true
spring.flyway.baseline-on-migrate = true
flyway.baseline-on-migrate= true
flyway.baselineOnMigrate=true