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 代码一样,实际上是动态的。
我无法从 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 代码一样,实际上是动态的。