gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 15:42:59 25 4
gpt4 key购买 nike

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

有没有办法强制flyway清理oracle db?

回答评论中的问题:

这是通过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 "_ORACLE_SCRIPT"=true; 创建的

最佳答案

Flyway 将 throw this exception如果当前架构被认为是系统架构:

@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!");
}

如果一个模式在 known default schemas 的列表中,则认为它是一个系统模式。或有 ORACLE_MAINTAINED = 'Y' .

使用 alter session set "_ORACLE_SCRIPT"=true; 为用户/架构设置 ORACLE_MAINTAINED = 'Y' 创建用户。

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

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

create user c##scott identified by tiger;

或者使用alter session set "_ORACLE_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

关于oracle - 如何强制 flyway 清理我的 docker oracle 数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51763602/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com