我正在尝试将我们的Oracle数据库创建脚本转换为使用Flyway,以便在数据库上进行分布式开发变得更加容易。这些脚本主要由sql命令组成,几乎不需要更改,因此很好。我正在使用Flyway(4.0.3)的命令行版本来对抗Oracle 11.2 Express数据库。
但是有一个脚本我遇到了一些麻烦,即在创建模式,角色和授予这些模式/角色的权限时。
以下是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
如果我删除了连接sys / 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命令之前创建模式用户/角色并手动授予他们权限?
只有在创建一个不常发生的新数据库时才能完成此任务。
希望你能帮助我:)
答案 0 :(得分:0)
我不认为您可以在Flyway迁移中使用" connect" -SQL-Statement,因为这是SQL*Plus-Syntax。在使用config-file开始迁移之前,您可以通过命令行迁移需要更多特权用户的前几次迁移:
flyway -configFile=path/to/flyway.conf -user="SYS as sysdba" -password=<password> -target=<#ofInitialMigration> migrate
然后命令行参数将覆盖配置文件中指定的参数,因此您可以执行第一次作为SYS迁移。 之后,您可以更改回以前启动flyway迁移的方式,然后应该跳过第一次迁移,因为它之前已经应用过。两个调用都可以组合在一个shell脚本中,以最大限度地减少手动操作。
当然,这仅适用于您的初始迁移实际上是第一次迁移的情况。它可能不太理想,但我认为它比预先手动授予所有内容更好。