Проблема с созданием нового объекта каталога в Oracle - ORA-20900: неверный путь, используемый для каталога - PullRequest
0 голосов
/ 10 июля 2020

У меня есть база данных Oracle, размещенная в AWS RDS.

В ходе выполнения некоторых задач экспорта (expdp) мне интересно, какие файлы существуют в каталоге, на который указывает DATA_PUMP_DIR, и насколько они велики.

Я нашел эту команду в AWS документах:

select * from table(RDSADMIN.RDS_FILE_UTIL.LISTDIR('DATA_PUMP_DIR')) order by mtime;

Она дает мне 3 записи:

bbr-imp-meta.log    file        14522   15-SEP-17
bbr-imp-data.log    file        1195    16-SEP-17
datapump/           directory   4096    09-JUL-20

Как я могу посмотреть, какие файлы находятся в этом подкаталоге datadump? Я попытался создать новый объект каталога, указывающий на этот путь, чтобы выполнить указанную выше команду для нового объекта каталога, но получаю следующую ошибку:

Error starting at line : 1 in command -
CREATE DIRECTORY DATA_PUMP_DIR_SUBDIR1
  AS '/rdsdbdata/datapump/datapump'
Error report -
ORA-00604: error occurred at recursive SQL level 1
ORA-20900: Invalid path used for directory: /rdsdbdata/datapump/datapump
ORA-06512: at "RDSADMIN.RDSADMIN_TRIGGER_UTIL", line 404
ORA-06512: at line 2
00604. 00000 -  "error occurred at recursive SQL level %s"
*Cause:    An error occurred while processing a recursive SQL statement
           (a statement applying to internal dictionary tables).
*Action:   If the situation described in the next error on the stack
           can be corrected, do so; otherwise contact Oracle Support.

О чем это мне говорит? Похоже, пути не существует? Я неправильно интерпретирую? Это как-то связано с привилегиями? Имеет ли значение, какой пользователь БД создает объект каталога? Я новичок в этом.

Изменить: При дальнейшем исследовании кажется, что RDS ограничивает создание объектов каталогов . Для этого должна использоваться процедура AWS, и похоже, что я не могу указать путь явно: «Система автоматически выбирает фактическое имя пути к хосту». В таком случае, как я могу получить доступ к этому подкаталогу в базе данных Oracle, размещенной на RDS? Интересно, откуда вообще появился этот подкаталог.

Редактировать 2: Теперь я начинаю подозревать, что подкаталог отсутствует вообще. Я выполнил этот запрос ...

select * from all_directories order by directory_path;

и среди результатов есть 5 объектов каталогов, созданных (я думаю) моим бывшим товарищем по команде:

SYS SANDBOX_DATA_PUMP_DIR   /rdsdbdata/userdirs/01  0
SYS PREPOD_DATA_PUMP_DIR    /rdsdbdata/userdirs/02  0
SYS PREPROD_DATA_PUMP_DIR   /rdsdbdata/userdirs/03  0
SYS DM_DATA_PUMP_DIR    /rdsdbdata/userdirs/04  0
SYS PS_DATA_PUMP_DIR    /rdsdbdata/userdirs/05  0

Если Я запускаю процедуру RDSADMIN.RDS_FILE_UTIL.LISTDIR для каждого из этих объектов каталога, всегда есть результат с type directory с именем, которое соответствует directory_path, указанному в all_directories для этого объекта каталога. Я подозреваю, что этот результат от RDSADMIN.RDS_FILE_UTIL.LISTDIR просто ссылается на путь, на который указывает сам объект каталога. Жаль, что нет лучшей документации, доступной с AWS на RDSADMIN.RDS_FILE_UTIL.LISTDIR ...

1 Ответ

0 голосов
/ 10 июля 2020

Это:

ORA-20900: Invalid path used for directory: /rdsdbdata/datapump/datapump

указывает, что ошибка не является встроенным исключением Oracle, а создана разработчиком (у которого есть коды ошибок от -20000 до - 20999 доступно для своих целей).

Кто это был? Это:

ORA-06512: at "RDSADMIN.RDSADMIN_TRIGGER_UTIL", line 404

предполагает, что RDSADMIN пользователь владеет «чем-то» с именем RDSADMIN_TRIGGER_UTIL (запрос user / all / dba_objects, чтобы узнать, что это такое), что вызвало ошибку. Может быть, триггер или посылка ... не могу сказать.

...