我正在尝试使用Flyway 4.2.0 + Oracle 11g
我有这个空的架构:
当我尝试迁移时,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;
}
为什么会收到此消息?我的基地是空的。
答案 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