Oracle 使用“时出错”;将sys连接为sysdba“;在FlywayDb迁移中
我正在尝试将我们的Oracle数据库创建脚本转换为使用Flyway,以便数据库上的分布式开发变得更容易。这些脚本主要由sql命令组成,几乎不需要任何更改,所以这很好。我正在对Oracle 11.2 Express数据库使用Flyway(4.0.3)的命令行版本 但是,有一个脚本我遇到了一些问题,即在创建模式、角色和向这些模式/角色授予特权时 下面是sql迁移文件的外观示例:Oracle 使用“时出错”;将sys连接为sysdba“;在FlywayDb迁移中,oracle,command-line,flyway,Oracle,Command Line,Flyway,我正在尝试将我们的Oracle数据库创建脚本转换为使用Flyway,以便数据库上的分布式开发变得更容易。这些脚本主要由sql命令组成,几乎不需要任何更改,所以这很好。我正在对Oracle 11.2 Express数据库使用Flyway(4.0.3)的命令行版本 但是,有一个脚本我遇到了一些问题,即在创建模式、角色和向这些模式/角色授予特权时 下面是sql迁移文件的外观示例: alter user SAMPLEDB identified by ${schemaPassword}; alter us
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
如果我移除连接系统/PASSWORD@xe作为sysdba行,我得到以下错误:
SQL State : 42000
Error Code : 1031
Message : ORA-01031: insufficient privileges
Statement : grant EXECUTE ON SYS.DBMS_PIPE to SAMPLEDB
我使用的是flyway.conf配置文件中配置的Oracle“system”用户
因此,问题是,我是否可以在sql文件中将用户更改为sysdba用户,还是应该在运行flyway migrate命令之前创建模式用户/角色并手动向其授予权限
只有在创建一个不应该经常发生的新数据库时,才能完成此任务
希望您能在这方面帮助我:)我不认为您可以在Flyway迁移中使用“connect”-SQL语句,就像这样。您可以做的是在使用配置文件开始迁移之前,通过命令行迁移前几个需要更多特权用户的迁移:
flyway -configFile=path/to/flyway.conf -user="SYS as sysdba" -password=<password> -target=<#ofInitialMigration> migrate
flyway-conffile=path/to/flyway.conf-user=“sysas sysdba”-password=-target=migrate
然后,命令行参数将覆盖配置文件中指定的参数,因此您可以作为SYS执行第一次迁移。
之后,您可以更改回以前启动flyway迁移的方式,然后只需跳过第一次迁移,因为之前已经应用了该方法。这两个调用可以组合在一个shell脚本中,以尽量减少手动操作
当然,这只有在您的初始迁移确实是第一次迁移时才有效。这可能并不理想,但我认为这比事先手动授予一切要好。谢谢您的回答。然而,由于我工作中的其他问题,我不得不将这个项目运送到另一个国家的另一个团队。因此,现在我无法测试您的解决方案是否可行,但我会将其标记为解决方案:)