当它是同义词时,Flyway init()无法升级schema_version

时间:2013-08-12 09:37:23

标签: oracle flyway

在某些方面,类似于How to handle Oracle synonyms with Flyway 2.0.1?。我们的控制安全& DBA组已经为对象(表,视图,sp){owner}和一个用于通过同义词{user}访问的模式颁布了一个Oracle模式。大多数应用程序可能会使用切换上下文,但除了前面提到的策略之外,在大多数Java JPA访问中都存在一些遗留的PL / SQL用法。所有者无权访问用户架构。用户可以创建同义词。

尚未考虑编写自定义Java代码 - 尝试开箱即用的mvn命令行。

因此,我针对Owner模式运行了Flyway 2.2 init(),然后立即创建了一个名为SCHEMA_VERSION_USER的副本。 (大写以避免Oracle(10g)导致同义词出现问题。)

手动为SCHEMA_VERSION_USER创建了同义词Owner.SCHEMA_VERSION_USER

执行的

mvn compile flyway:migrate -Dflyway.user=USER -Dflyway.table=SCHEMA_VERSION_USER

但收到了

[INFO] Upgrading the metadata table "USER"."SCHEMA_VERSION_USER" to the Flyway 2.0 format...
[INFO] Checking prerequisites...
[ERROR] com.googlecode.flyway.core.api.FlywayException: Unable to upgrade the metadata table "USER"."SCHEMA_
VERSION_USER" to the Flyway 2.0 format
[ERROR] Caused by java.sql.SQLException: ORA-00904: "DESCRIPTION": invalid identifier

[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Flyway Error: com.googlecode.flyway.core.api.FlywayException: Unable to upgrade the metadata table "USER"."SCHEMA_VERSION_USER" to the Flyway 2.0 format

ORA-00904: "DESCRIPTION": invalid identifier

当我尝试在-Dflyway.table=USER.SCHEMA_VERSION_USER中对表进行限定时,它失败并带有

[ERROR] com.googlecode.flyway.core.api.FlywayException: Found non-empty schema "USER" without metadata table! Use init() first to initialize the metadata table.

这是一个缺陷;刻意设计;没想到;积压?我是否需要让DBA执行所有内容作为系统dba以避免权限问题?不要因为它阻止我们在所有环境中使用它们而不仅仅是刺激而且我们正在尝试引入“自动化”持续交付。或者也许让他们在User模式中手动创建schema_version表以避免初始升级检查?我是否必须编写java以绕过初始升级检查?

发布说明:我们正试图让他们接受一些现代数据库自动化工具 - 他们之前只接受过维护噩梦的自定义手动控制脚本。

谢谢!

3 个答案:

答案 0 :(得分:0)

这是迄今为止尚未出现的情景。升级代码假定它是一个表,并希望确保从Flyway 1.x顺利迁移。此时无法绕过它。

在用户架构中创建表应该可以解决问题。您可以使用flyway.schemas属性指定要创建表的架构。该表将在列表的第一个中创建。

答案 1 :(得分:0)

这是我工作的问题。我们有一个MD和APP用户。 APP用户无法创建表,并且不允许MD用户具有CREATE ANY TABLE。所以我们真的需要APP用户的FlywayDb版本表作为MD用户表的同义词。自2年前提出这个问题以来,有人对此做过任何工作吗?

答案 2 :(得分:0)

运行命令时使用-Dflyway.schemas = OWNER。