Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 使用“时出错”;将sys连接为sysdba“;在FlywayDb迁移中_Oracle_Command Line_Flyway - Fatal编程技术网

Oracle 使用“时出错”;将sys连接为sysdba“;在FlywayDb迁移中

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

我正在尝试将我们的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
如果我移除连接系统/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脚本中,以尽量减少手动操作


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

谢谢您的回答。然而,由于我工作中的其他问题,我不得不将这个项目运送到另一个国家的另一个团队。因此,现在我无法测试您的解决方案是否可行,但我会将其标记为解决方案:)