У меня есть база данных 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
...