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

如何强制flyway清理我的docker oracle数据库?

云骏奇
2023-03-14

我已经下载了oracle数据库EE的官方oracle docker映像。我有一个flyway配置,经常对本地安装的XE版本的数据库运行flyway:clean。但是flyway告诉我,不允许清理docker映像中的数据库,但它可以迁移它。

有没有办法强制flyway清理甲骨文数据库?

回答评论中的问题:

以下是通过maven运行flyway时的错误消息:

org.flywaydb.core.api.FlywayException: Clean not supported on Oracle for system schema "SCHEMA_OWNER"! It must not be changed in any way except by running an Oracle-supplied script! -> [Help 1]

我连接的用户是在alter session set“\u ORACLE\u SCRIPT”=true的情况下创建的


共有1个答案

钱渊
2023-03-14

如果当前架构被视为系统架构,Flyway将引发此异常:

@Override
protected void doClean() throws SQLException {
    if (isSystem()) {
        throw new FlywayException("Clean not supported on Oracle for system schema " + database.quote(name) + "! " +
                "It must not be changed in any way except by running an Oracle-supplied script!");
    }

如果模式在已知默认模式列表中,或者具有ORACLE_MAINTAINED='Y',则该模式被视为系统模式。

使用alter session set“\u ORACLE\u SCRIPT”=true创建用户 为用户/架构设置ORACLE\u mainted='Y'

Oracle 12c中有两种数据库:数据库容器(CDB)和可插拔数据库(PDB)。这是为了支持多租户。

您当前正在CDB中创建用户,这将是所有PDB的公共用户。在这种情况下,您必须在用户名前加上c#

create user c##scott identified by tiger;

或者使用alter session set“\u ORACLE\u SCRIPT”=true ,否则将出现错误:

ORA-65096: invalid common user or role name in oracle

另一种选择是连接到PDB并在那里创建本地用户(不需要前缀,用户将只存在于该PDB中),例如:

sqlplus sys/Oradoc_db1@ORCLPDB1 as sysdba

create user scott identified by tiger;

更新Flyway url以作为该用户连接到该PDB:

-url=jdbc:oracle:thin:@oracle-ee:1521/orclpdb1.localdomain -user="scott" -password=tiger

 类似资料:
  • 问题内容: 有人可以为我指出一份良好的初学者指南,以安全地运行部分由用户输入构成的SQL查询吗?我正在使用Java,但是语言无关的指南也很好。 期望的行为是,如果有人在GUI中键入类似 数据库应将其视为文字字符串,并安全地存储它而不会删除任何表。 问题答案: 您肯定要使用PreparedStatement。他们很方便。这是一个例子。

  • 我想手动删除已针对数据库成功运行的flyway迁移。这是最后一次迁移。 这行得通吗 > 从schema_version表中删除迁移项 还有什么我需要做的吗?

  • 问题内容: 当我创建/调试docker映像/容器docker时,似乎在我的系统上留下了各种工件。(有一点限制为48张图像),但是我上次查看的图像为20-25张;。 因此,首要问题是: 如何正确清理? 当我手动删除图像时,更多的图像开始出现。嗯? 我应该为主机真正分配多少磁盘空间? 下次重启后,正在运行的守护程序会真正重启吗? 以及meta问题…我没有问过什么问题? 问题答案: 删除“晃来晃去”的图

  • 问题:是否可以在迁移脚本中创建一个新的DB,然后连接到它?怎么做? 我的场景:我试图在我的Java项目(使用Jersey2.4+Tomcat7+PostgreSQL 9.3.1+EclipseLink的RESTful应用程序)中使用flyway来管理使用Git的不同开发人员之间的更改。我编写了我的init脚本并运行它: 而且效果很好。问题是我不能用我的脚本创建新的DB。当我在脚本中包含以下一行时:

  • 问题内容: 有人可以给我一个SQL查询来帮助我清理此表吗?在清除locid(索引)后,应该重新设置,这是使用此查询的县城 。当我通过phpmyadmin的导入多次导入sql文本时,就会出现这种冗余数据,这就是结果, 问题答案: 在表位置添加唯一索引,这样就不会插入重复的记录 这将自动从表中删除重复的记录,对于以后的插入查询,您需要使用子句来避免出现重复的错误。 但正如注释中所建议的那样,它可能不适

  • 问题内容: 问题: 是否可以在迁移脚本中创建一个新的数据库,然后连接到它?怎么样? 我的场景: 我正在尝试在Java项目(使用Jersey2.4 + tomcat 7 + PostgreSQL 9.3.1 + EclipseLink的RESTful应用程序)中使用flyway来管理使用git的不同开发人员之间的更改。我写了自己的初始化脚本,并运行了: 而且效果很好。问题是我无法使用脚本创建新的数据