Oracle мультитенант - поменять контейнер с PL / SQL - PullRequest
0 голосов
/ 16 апреля 2020

У меня проблема с изменением контейнера с PL / SQL. Результат одинаков либо с EXECUTE IMMEDIATE, либо с DBMS_ SQL. Я вхожу в систему root как SYSDBA с обычным пользователем. У меня есть одно приложение root PDB внутри, которое называется PDB1

. Я могу переключить контейнер и получить обратно:

ALTER SESSION SET CONTAINER =PDB1;

alter session set container = CDB$ROOT;

, но когда я делаю ti из PL / SQL Я могу go от root до PDB1, но не могу go вернуться к root:

begin

execute immediate 'alter session set container=PDB1';

end;
/

это работает, я сейчас внутри PDB1

если я сейчас попытаюсь go вернуться к root с помощью:

begin

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

end;
/

Я получу сообщение об ошибке:

ORA-01031: недостаточно прав

Аналогичные результаты получены с приложением root PDB и его PDB, с обычным пользователем приложения ... так что я могу переключиться с приложения root на PDB, но не могу go назад.

Есть ли какой-нибудь способ или привилегия, чтобы я мог переключиться на верхний контейнер из PL / SQL?

1 Ответ

0 голосов
/ 16 апреля 2020

Это объяснено в этом WP (начало страницы 11). Во всех случаях, что вы пытаетесь сделать? На самом деле не рекомендуется менять контейнеры внутри PL / SQL, за исключением очень особых случаев, как, например, весь ваш код SQL, который есть на самом деле динамически c.

...