Oracle 多租户 - 从 PL/SQL 更改容器

Oracle multitenant - change container from PL/SQL

我无法从 PL/SQL 更改容器。 结果是相同的,无论是使用 EXECUTE IMMEDIATE 还是使用 DBMS_SQL。 我以普通用户身份以 SYSDBA 身份登录到根目录。我内部有一个应用程序根 PDB,称为 PDB1

我可以切换容器并返回:

ALTER SESSION SET CONTAINER =PDB1;

alter session set container = CDB$ROOT;

但是当我从 PL/SQL 执行 ti 时,我可以从根转到 PDB1,但是,不能返回到根:

begin

execute immediate 'alter session set container=PDB1';

end;
/

这有效,我现在在 PDB1 中

如果我现在尝试返回根目录:

begin

execute immediate 'alter session set container=CDB$ROOT';

end;
/

我收到一个错误:

ORA-01031: insufficient privileges

应用程序根 PDB 及其 PDB 以及普通应用程序用户的结果类似...所以,我可以从应用程序根切换到 PDB,但不能返回。

有什么方法或特权可以让我从 PL/SQL 切换到上层容器吗?

this WP(第 11 页顶部)对此进行了解释。在所有情况下,你想做什么?不建议在 PL/SQL 中更改容器,除非在非常特殊的情况下,就像所有 SQL 代码一样,实际上是动态的。