当前位置: 首页 > 知识库问答 >
问题:

在FlywayDb迁移中使用“connect sys as sysdba”时出错

澹台硕
2023-03-14

我正在尝试将我们的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迁移时,我会收到以下错误消息:

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

如果我删除连接sys/PASSWORD@xesysdba行,然后我得到这个错误:

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迁移命令之前手动创建模式用户/角色并授予他们权限?

该任务仅在创建新数据库时执行,这种情况不会经常发生。

希望你能帮我一下:)

共有1个答案

田博超
2023-03-14

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

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

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

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

 类似资料:
  • 我有一个play框架2.2.2 scala应用程序并使用play-flyway 1.0.3。 以下迁移应通过flyway运行: 因此,我将一列添加到表中,然后使用更新语句以编程方式填充它。 第一行执行良好,但update statemens失败 然而,当我使用迁移SQL代码并使用phpmyadmin运行它时,它工作得很好(虽然运行需要2-5秒,但表相当大)。 我的mysql。日志看起来像 flyw

  • 我试图使用这个迁移,但我不断地得到错误,就像下面这样 这是我的迁移文件 SQLite3::SQLException:表“Employees”已存在:创建表“Employees”(“ID”整数主键AUTOINCREMENT NOT NULL,“name”varchar(255),“hiredate”date,“salary”float,“fulltime”boolean DEFAULT NOT“,”

  • 我正在flyway的CMD中运行命令,但脚本文件的迁移会出现以下异常 [错误]无法执行目标组织。flywaydb:flyway maven插件:3.2.1:在convertopia auto db:org项目上迁移(默认cli)。flywaydb。果心应用程序编程接口。FlywayException:验证失败。迁移1.0.53的迁移描述不匹配[错误]- 我尝试过,它说构建成功,但问题仍然没有解决。

  • 命令命令结果: 问题是我只有users_table,admins_table,volunteers_table,opinions_table和contact_tablelaravel迁移文件夹...他们从哪里来,从哪里迁移... 为什么会产生这个问题基本上我是在laravel应用程序中使用chatify实时聊天软件包所有以上消息收藏夹化身表都是该软件包的一部分,但我已经从laravel应用程序中删

  • 我正在做一个项目,把我的数据库从sqlite3切换到mysql。所有的配置都做得很好,但是当我在Windows机器上运行rake db:migrate时,我遇到了错误。 null null 这是我的windows database.yml文件 默认:&default适配器:mysql2编码:utf8池:5用户名:root密码:****socket:/var/run/mysqld/mysqld。so

  • 当我尝试执行时,我得到以下结果: 在第647行:SQLSTATE[HY000][2002]连接被拒绝(SQL:) db_connection=mysql db_host=127.0.0.1 db_port=33060///我也试过3360 db_database=homestead db_username=homestead db_password=secret broadcast_driver=