1

在某些方面,类似于How to handle Oracle synonyms with Flyway 2.0.1?. 我们的控制安全和 DBA 小组已经为对象(表、视图、sp){owner} 制定了一种 Oracle 模式,并为通过同义词 {user} 访问的一种模式制定了规则。大多数应用程序可能会使用 switch 上下文,但除了前面提到的让我措手不及的策略之外,在大多数 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 的身份执行所有操作以避免权限问题?不喜欢,因为它会锁定我们在所有环境中使用它们,而不仅仅是产品,我们正在尝试引入“自动化”持续交付。或者也许只是让他们schema_version在用户模式中手动创建表以避免初始升级检查?我是否必须编写 java 来绕过初始升级检查?

后记:我们正试图让他们接受一些现代数据库自动化工具——他们以前只接受自定义手动控制脚本,这是维护的噩梦。

谢谢!

4

3 回答 3

0

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

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

于 2013-08-13T08:11:11.140 回答
0

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

于 2016-10-20T14:06:01.200 回答
0

这也是我工作的一个问题。我们有一个MD和APP用户。APP用户不能创建表,MD用户不能有CREATE ANY TABLE。所以我们确实需要APP用户的FlywayDb版本表是MD用户表的同义词。自从 2 年前提出这个问题以来,有人在这方面做过任何工作吗?

于 2016-01-07T14:10:52.430 回答