在FlywayDb迁移

时间:2016-08-04 15:17:14

标签: oracle command-line flyway

我正在尝试将我们的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命令之前创建模式用户/角色并手动授予他们权限?

只有在创建一个不常发生的新数据库时才能完成此任务。

希望你能帮助我:)

1 个答案:

答案 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脚本中,以最大限度地减少手动操作。

当然,这仅适用于您的初始迁移实际上是第一次迁移的情况。它可能不太理想,但我认为它比预先手动授予所有内容更好。