基于 Oracle 版本的重新定义 - 升级到 ORA$BASE

问题描述 投票:0回答:1

Oracle 版本 19.20.0.0.0。

我们正在尝试测试 Oracle 的基于版本的重定义功能是否可以帮助我们在修改某些 PLSQL 对象时消除应用程序中断的需要。

我们已经尝试在执行 PLSQL 代码之前使用

DBMS_SESSION.RESET_PACKAGE
调用,但在我们的所有场景中都不起作用。

所以我有 2 个模式 -

the_user
the_coder

the_coder
包含
the_user
将执行的 PLSQL 对象。

因此我为版本启用

the_coder
,如下所示:

GRANT CREATE ANY EDITION, DROP ANY EDITION TO the_coder;

ALTER USER the_coder ENABLE EDITIONS FORCE;

然后作为

the_coder

CREATE OR REPLACE PACKAGE the_pkg AS
   FUNCTION f RETURN VARCHAR2;
END the_pkg;
/

CREATE OR REPLACE PACKAGE BODY the_pkg AS
   FUNCTION f RETURN VARCHAR2 IS
   BEGIN 
      RETURN ( 'Hello world' );
   END f;
END the_pkg;
/

GRANT EXECUTE ON the_pkg TO the_user;

the_user

SELECT the_coder.the_pkg.f FROM dual;

M
---------------------------------------
Hello world

数据库只有默认版本

ORA$BASE

现在让我们尝试一些 EBR,如

the_coder
:

CREATE EDITION ebr_poc;

GRANT USE ON EDITION ebr_poc TO the_user;

ALTER SESSION SET EDITION = ebr_poc;

CREATE OR REPLACE PACKAGE the_pkg AS
   FUNCTION f RETURN VARCHAR2;
END the_pkg;
/

CREATE OR REPLACE PACKAGE BODY the_pkg AS
   FUNCTION f RETURN VARCHAR2 IS
   BEGIN 
      RETURN ( 'Hello world, again' );
   END f;
END the_pkg;
/

GRANT EXECUTE ON the_pkg TO the_user;

然后作为

the_user

ALTER SESSION SET EDITION = ebr_poc;
SELECT the_coder.the_pkg.f FROM dual;

M
---------------------------------------
Hello world, again

那么我现在如何“推广”从

ebr_poc
ORA$BASE
版本的更改?

对于版本,我们似乎必须不断添加版本,并知道将哪个版本设置为默认版本,但实际上我们希望让事情尽可能简单,只需将更改移回

ORA$BASE
版本即可。

这可能吗?

oracle plsql
1个回答
0
投票

通常情况下,你会

ALTER DATABASE DEFAULT EDITION = ebr_poc;

一旦您确认新版本中的代码可以正常工作。如果您不想在系统中保留大量版本,则可以在不再有任何连接使用旧版本后删除旧版本。

ORA$BASE
没有什么特别之处,只是它是安装新数据库时存在的唯一版本。当不再需要它时,您可以像任何其他用户创建的版本一样删除它。

EBR 常见问题解答中

用户应该删除 ORA$BASE 吗?

需要删除ORA$Base 可以删除其他旧的、退役的版本之前的版本。这 ORA$Base 版本除了它是 当数据库是时,为数据库中的一个版本指定的名称 第一次创建。我们所有现有的客户都愉快地使用过 多年来基于版本的重新定义都放弃了ORA$Base 许多年前的版本,因此没有出现任何问题。

© www.soinside.com 2019 - 2024. All rights reserved.