【问题标题】:Error when using "connect sys as sysdba" in FlywayDb migration在 FlywayDb 迁移中使用“connect sys as sysdba”时出错
【发布时间】:2016-12-10 19:26:06
【问题描述】:

我正在尝试将我们的 Oracle 数据库创建脚本转换为使用 Flyway,以便数据库上的分布式开发变得更加容易。这些脚本主要由 sql 命令组成,几乎不需要更改,所以没问题。我正在对 Oracle 11.2 Express 数据库使用 Flyway(4.0.3) 的命令行版本。

但是,有一个脚本我遇到了一些问题,即在创建架构、角色和授予这些架构/角色权限时。

以下是 sql 迁移文件的示例:

alter user SAMPLEDB identified by ${schemaPassword};
alter user LOCDB identified by ${schemaPassword};
grant create session,create view,resource to SAMPLEDB;
grant create session,create view,resource to LOCDB;

connect sys/PASSWORD@xe as sysdba;

grant EXECUTE ON SYS.DBMS_PIPE to SAMPLEDB;

文件当然要大得多,但这应该足以大致了解它的外观。

因此,当我在这些 sql 命令上运行 flyway migrate 时,我收到以下错误消息:

SQL State  : 42000
Error Code : 900
Message    : ORA-00900: invalid SQL statement
Statement  : connect sys/PASSWORD@xe as sysdba

如果我删除 connect sys/PASSWORD@xe as sysdba 行,则会收到此错误:

SQL State  : 42000
Error Code : 1031
Message    : ORA-01031: insufficient privileges
Statement  : grant EXECUTE ON SYS.DBMS_PIPE to SAMPLEDB

我正在使用在 flyway.conf 配置文件中配置的 Oracle“系统”用户。

所以问题是,我可以在 sql 文件中以某种方式将用户更改为 sysdba 用户,还是应该在运行 flyway migrate 命令之前创建模式用户/角色并手动授予他们权限?

只有在创建不应该经常发生的新数据库时才会执行此任务。

希望你能帮我解决这个问题:)

【问题讨论】:

    标签: oracle command-line flyway


    【解决方案1】:

    我认为您不能在 Flyway 迁移中使用“连接”-SQL 语句,因为这是 SQL*Plus-Syntax。您可以做的是在使用配置文件开始迁移之前通过命令行迁移需要更多特权用户的前几个迁移:

    flyway -configFile=path/to/flyway.conf -user="SYS as sysdba" -password=<password> -target=<#ofInitialMigration> migrate
    

    然后命令行参数将覆盖配置文件中指定的参数,因此您可以以 SYS 身份执行您的第一个迁移。 之后,您可以更改回之前启动 flyway 迁移的方式,然后它应该跳过第一次迁移,因为它之前已经应用过。这两个调用可以组合在一个 shell 脚本中,以最大限度地减少手动操作。

    当然,这仅在您的初始迁移确实是第一次迁移时才有效。这可能并不理想,但我认为这比事先手动授予所有内容要好。

    【讨论】:

    • 感谢您的回答。然而,由于我工作中的其他问题,我不得不将这个项目运送到另一个国家的另一个团队。所以现在我无法测试您的解决方案是否可行,但无论如何我都会将其标记为解决方案:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-15
    • 1970-01-01
    • 2015-08-19
    • 2016-03-07
    • 2015-01-05
    • 2014-10-28
    • 2021-02-12
    相关资源
    最近更新 更多