Oracle мультитенант - выполнить PL / SQL над СУБД_ SQL в другом контейнере - PullRequest
1 голос
/ 18 апреля 2020

В документации сказано, что

execute immediate 'alter session set container=myPDB'

отключено для PDB (возможно, из CDB Root, а также для контейнера приложений),

, но ничего не говорит о СУБД_ SQL. PARSE. Я ожидал, что он сможет выполнить PL / SQL из PDB в другой PDB через DBMS_ SQL .PARSE, но получил ошибку: ORA-01031: недостаточно привилегий

Итак, Похоже, это тоже невозможно. Тест состоит в следующем

Я вхожу в систему CDB Root как SYSDBA.

Затем я могу выполнить следующее:

declare
c1 int;
rowsn integer;
statem varchar2(500);
ctx    varchar2(128);
BEGIN
    c1 := DBMS_SQL.OPEN_CURSOR;
    ctx :='myPDB';
    statem :='  declare
                                var1 varchar2(60);
                                begin
                                select user into var1 from dual;
                                end;';
   DBMS_SQL.PARSE(c => c1 ,
                   statement => statem,
                   language_flag => DBMS_SQL.NATIVE,
                   container => ctx);

  rowsn:=DBMS_SQL.EXECUTE(c=>c1);
  DBMS_SQL.CLOSE_CURSOR(c=>c1);
END;
/

, и это работает!

но как только я переключаюсь на PDB как

alter session set container=myPDB;

, я больше не могу делать следующие

alter session set container=myPDB;


declare
c1 int;
rowsn integer;
statem varchar2(500);
ctx    varchar2(128);
BEGIN
    c1 := DBMS_SQL.OPEN_CURSOR;
    ctx :='myPDB2';
    statem :='  declare
                                var1 varchar2(60);
                                begin
                                select user into var1 from dual;
                                end;';
   DBMS_SQL.PARSE(c => c1 ,
                   statement => statem,
                   language_flag => DBMS_SQL.NATIVE,
                   container => ctx);

  rowsn:=DBMS_SQL.EXECUTE(c=>c1);
  DBMS_SQL.CLOSE_CURSOR(c=>c1);
END;
/

любую возможность для выполнения PL / SQL из PDB, внутри другой PDB, через DBMS_ SQL .PARSE?

1 Ответ

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

PDB - это фактически отдельные базы данных с отдельной защитой (пользователи, роли, привилегии и т. Д. c.). Между ними нет видимости. Вы должны рассматривать их как независимые, автономные базы данных. Единственный способ взаимодействия автономных Oracle баз данных - через ссылки на базы данных.

...