【发布时间】:2023-03-11 15:00:02
【问题描述】:
我正在从 Maven 构建中执行 Flyway。我有使用 Flyway 的经验,但几年没有使用 Oracle。当它尝试运行 init 目标时,我收到以下错误消息:
[INFO] --- flyway-maven-plugin:3.0:clean (prepare-schema-using-flyway) @ my-project ---
[INFO] Database: jdbc:oracle:thin:@my-oracle-host:1521:dev (Oracle 11.2)
[INFO] Cleaned schema "MY_SCHEMA" (execution time 00:03.483s)
[INFO]
[INFO] --- flyway-maven-plugin:3.0:init (prepare-schema-using-flyway) @ my-project ---
[INFO] Database: jdbc:oracle:thin:@my-oracle-host:1521:dev (Oracle 11.2)
[INFO] Creating Metadata table: "MY_SCHEMA"."schema_version"
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 16.991s
[INFO] Finished at: Thu Aug 21 09:44:09 CDT 2014
[INFO] Final Memory: 20M/160M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.flywaydb:flyway-maven-plugin:3.0:init (prepare-schema-using-flyway) on project my-project: org.flywaydb.core.internal.dbsupport.FlywaySqlScriptException: Error executing statement at line 17: CREATE TABLE "MY_SCHEMA"."schema_version" (
[ERROR] "version_rank" INT NOT NULL,
[ERROR] "installed_rank" INT NOT NULL,
[ERROR] "version" VARCHAR2(50) NOT NULL,
[ERROR] "description" VARCHAR2(200) NOT NULL,
[ERROR] "type" VARCHAR2(20) NOT NULL,
[ERROR] "script" VARCHAR2(1000) NOT NULL,
[ERROR] "checksum" INT,
[ERROR] "installed_by" VARCHAR2(100) NOT NULL,
[ERROR] "installed_on" TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
[ERROR] "execution_time" INT NOT NULL,
[ERROR] "success" NUMBER(1) NOT NULL
[ERROR] ): ORA-01031: insufficient privileges
[ERROR] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
当我尝试通过 JDBC 连接(我使用 IntelliJ 的 DBHelper)执行相同的 SQL 时,我收到了相同的错误消息。当我删除所有双引号时,它成功执行了。
我无法想象 Flyway 3.0 与 Oracle 不兼容,但我怀疑可能有一个服务器设置指定了在创建期间围绕数据库对象的字符。例如,"my_table"."my_id" 或 [my_table].[my_id]
或者,有没有办法在 Flyway 的配置中关闭双引号?
【问题讨论】:
-
双引号是有效的,但可能会影响你正在做的事情。
MY_SCHEMA的实际值是大写的;或者引用的值是混合的还是小写的?如果引用混合大小写标识符,则它们必须始终完全匹配;因此,您可能应该将脚本中自动引用的所有值都设为大写以避免将来的痛苦。 -
双引号总是很可疑,但我想知道这里是否还有其他事情发生。如果架构名称错误,则错误应为
ORA-01918: user 'MY_SCHEMA' does not exist。ORA-01031: insufficient privileges表示架构存在,但您无权修改它。您是否有多个具有不同大小写和不同权限的“MY_SCHEMA”用户?检查select * from dba_sys_privs where lower(grantee) = 'my_schema';。 -
jdbc连接的用户必须有
create any table的权限,如果和MY_SCHEMA不同的话。如果没有,您将收到您显示的错误。如果MY_SCHEMA是通过jdbc连接的同一个用户,那么你必须拥有CREATE TABLE的权限 -
@Tim Andersen,您能否在使用 SQL 工具运行此
create table语句时显示其输出?sqlplus之类的就可以了。