Как перейти на единственную PDB в Oracle 12+?

Используя бродячие блоки Oracle, вы можете легко добавлять сценарии, запускаемые после установки, помещая их вuserscriptsкаталог. Я хочу создать своих стандартных пользователей, что легко (CREATE USER etc...). Однако этот пользователь должен быть создан в PDB, а не в CDB$ROOT.

Итак, как мне переключиться с sys / as sysdba, который подключен к CDB$ROOT, к единственной PDB в базе данных? Имя PDB не должно быть жестко закодировано, так как оно контролируется параметром в Vagrantfile. Сценарий должен успешно работать без вмешательства пользователя.

Я дошел до того, что этот код работает, но некрасиво:

COLUMN pdb_name NEW_VALUE mypdb
SELECT pdb_name
  FROM (
        SELECT pdb_name,
               RANK() OVER (ORDER BY CREATION_SCN) r
          FROM dba_pdbs p1
         WHERE pdb_name <> 'PDB$SEED'
       )
 WHERE r = 1;

ALTER SESSION SET CONTAINER=&mypdb; 

Должен быть способ попроще...

1 ответ

Если это правда, что это "единственный и неповторимый" PDB, почему все упорядочено? Разве тебе просто не нужно

COLUMN pdb_name NEW_VALUE mypdb
SELECT pdb_name
FROM dba_pdbs p1
WHERE pdb_name <> 'PDB$SEED'

Но поскольку вы используете бродячий файл, вы можете сделать так, чтобы ваши скрипты

grep ORACLE_PDB Vagrantfile | awk ...

чтобы получить имя PDB, а затем установить TWO_TASK или подобное этому.

Другие вопросы по тегам