В этой статье речь пойдет об объекте directory.
Использование
- Экспорт/импорт объектов базы данных с помощью утилит DataPump (expdp/impdp)
- Работа с типом данных BFILE (внешний большой объект, файл операционной системы)
- Использование с пакетом UTL_FILE в PL/SQL-коде
Объект Directory является логической ссылкой в базе данных на каталог файловой системы сервера, где установлена БД Oracle. Владельцем всех объектов Directory в базе данных является пользователь SYS, даже если объект Directory создан другим пользователем. Имена объектов Directory уникальны внутри всей БД. Все объекты Directory хранятся в табличном пространстве SYS.
Поскольку файлы и каталоги в действительности располагаются ВНЕ базы данных, процессы СУБД Oracle должны иметь необходимые права доступа к указанным каталогам файловой системы.
Синтаксис
Создание объекта Directory:
CREATE [OR REPLACE] DIRECTORY dir_name AS 'path';
где:
dir_name - имя создаваемого объекта Directory;
path - физический путь на файловой системе сервера БД;
опция OR REPLACE - используется для того, чтобы создать объект Directory с именем, которое уже существует в базе данных (пересоздать объект Directory).
ВНИМАНИЕ: в качестве пути path может быть использовано имя несуществующего каталога операционной системы. СУБД Oracle не проверяет наличие указанного каталога. В этом случае создание объекта Directory завершится успешно, но при дальнейшем его использовании, например, с утилитой expdp, будет выдана ошибка (см. Связанные ошибки).
Пример:
Windows:
CREATE DIRECTORY MyDir as 'e:\oracle\export\myexp';
*NIX:
CREATE DIRECTORY MyDir as '/u01/expimp/ImportDir';
Удаление объекта Directory
Пример:
Безопасность
Для того чтобы иметь возможность создавать/удалять объекты Directory, пользователь должен иметь системные привилегии CREATE ANY DIRECTORY/ DROP ANY DIRECTORY.
Для того чтобы иметь возможность читать/записывать файлы в объекты Directory, пользователь должен иметь объектные привилегии READ/WRITE (ON DIRECTORY). Объектные привилегии распространяются на весь объект DIRECTORY и все файлы в нем, невозможно указать отдельные привилегии READ/WRITE на отдельный файл в объекте DIRECTORY.
Увидеть все созданные объекты Directory базы данных можно с помощью запроса:
SELECT * FROM DBA_DIRECTORIES;
Связанные ошибки
- ORA-01031: привилегий недостаточно. Пользователь не обладает необходимыми привилегиями для создания/манипулирования объектами Directory.
- ORA-29283: недопустимая операция с файлом. Возможно, объект Directory ссылается на несуществующий каталог, либо недостаточно прав в операционной системе на чтение/запись в указанный каталог.
- ORA-31640: невозможно открыть файл дампа "…" для чтения. Указан несуществующий файл.