如何强制 flyway 清理我的 docker oracle 数据库?
How can I force flyway to clean my docker oracle database?
我已经下载了 Oracle 数据库 EE 的官方 oracle docker 映像。我有一个 flyway 配置,并且经常 运行 flyway:clean
针对本地安装的数据库 XE 版本。然而 flyway 告诉我不允许清理 docker 图像中的数据库,但它可以迁移它。
有没有办法强制 flyway 清理 oracle 数据库?
回答评论中的问题:
这是 运行ning flyway 通过 maven 时的错误消息:
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 or has 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 数据库 EE 的官方 oracle docker 映像。我有一个 flyway 配置,并且经常 运行 flyway:clean
针对本地安装的数据库 XE 版本。然而 flyway 告诉我不允许清理 docker 图像中的数据库,但它可以迁移它。
有没有办法强制 flyway 清理 oracle 数据库?
回答评论中的问题:
这是 运行ning flyway 通过 maven 时的错误消息:
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 or has 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