The default Data Pump directory object, DATA_PUMP_DIR, does not work with PDBs. You must define an explicit directory object within the PDB that you are exporting or importing.
При этом вы можете спокойно использовать эту директорию из подключаемой БД, работая с файлами через UTL_FILE. Похоже, проблема в том, что Data Pump фильтрует доступные в БД директории по ORIGIN_CON_ID:
SQL> select origin_con_id 2 from dba_directories 3 where directory_name = 'DATA_PUMP_DIR' 4 / ORIGIN_CON_ID ------------- 1 SQL> show con_id CON_ID ------------- 3
Проблема решается одним из двух способов:
- Создать свою директорию в подключаемой БД и дать права на её чтение и запись отдельному пользователю, если требуется:
SQL> create directory pdb1_data_pump_dir as '/path/to/dir'; Directory created. SQL> grant read, write on directory pdb1_data_pump_dir to system; Grant succeeded.
- Удалить директорию DATA_PUMP_DIR в корневом контейнере и создать её там с параметром сессии "_oracle_script"=FALSE, а затем создать её же в каждой подключаемой БД (и в шаблоне БД):
SQL> conn / as sysdba Connected. SQL> show con_id CON_ID ---------------- 1 SQL> drop directory data_pump_dir; Directory dropped. SQL> alter session set "_oracle_script" = false; Session altered. SQL> create directory data_pump_dir as '/path/to/dir'; Directory created. SQL> grant read, write on directory data_pump_dir to system; Grant succeeded. SQL> alter session set container = pdb1; Session altered. SQL> create directory data_pump_dir as '/path/to/dir'; Directory created. SQL> grant read, write on directory data_pump_dir to system; Grant succeeded.
Читать далее