在某些方面,类似于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 来绕过初始升级检查?
后记:我们正试图让他们接受一些现代数据库自动化工具——他们以前只接受自定义手动控制脚本,这是维护的噩梦。
谢谢!