oracle directory - ghdrako/doc_snipets GitHub Wiki
In Oracle Database, a directory is a database object that serves as a pointer to a physical directory on the server’s file system. It's mainly used for file operations like reading from or writing to external files via Oracle features such as:
- External tables
- Data Pump (import/export)
- UTL_FILE package
Create directory
CREATE OR REPLACE DIRECTORY my_dir AS '/path/to/your/folder';
Granting Permissions
GRANT READ, WRITE ON DIRECTORY my_dir TO your_user;
- Tylko użytkownicy z przydzielonymi uprawnieniami READ, WRITE (i opcjonalnie EXECUTE) mogą używać danego katalogu.
- Brak roli PUBLIC domyślnie – musisz jawnie przydzielić uprawnienia:
Brak kontroli uprawnień na poziomie systemu operacyjnego
- Jeśli Oracle ma dostęp do katalogu w systemie (z poziomu konta Oracle OS), użytkownik w bazie z przydzielonym WRITE może nadpisać plik.
- Nie ma "sandboxa" – katalogi mogą wskazywać na dowolny folder (nawet wrażliwy), jeśli tylko Oracle ma tam dostęp.
Use Case: UTL_FILE
DECLARE
f UTL_FILE.FILE_TYPE;
BEGIN
f := UTL_FILE.FOPEN('MY_DIR', 'test.txt', 'W');
UTL_FILE.PUT_LINE(f, 'Hello, Oracle directory!');
UTL_FILE.FCLOSE(f);
END;
Use Case: Data Pump (expdp/impdp
Musisz użyć DIRECTORY do określenia lokalizacji dumpa:
expdp user/password DIRECTORY=my_dir DUMPFILE=export.dmp LOGFILE=export.log
Notes
- The OS path must already exist and be accessible by the Oracle user (the system-level user that runs the Oracle DB).
- Directories are database objects — you can see them using:
SELECT * FROM ALL_DIRECTORIES;
SELECT * FROM USER_DIRECTORIES;
SELECT * FROM DBA_DIRECTORIES;
Uprawnienia
SELECT *
FROM DBA_TAB_PRIVS
WHERE TABLE_NAME IN (SELECT DIRECTORY_NAME FROM DBA_DIRECTORIES);
Info
- Oracle nie pozwala na operacje na katalogach z poziomu SQL
- Nie możesz np. sprawdzić, czy plik istnieje – musisz użyć pakietów PL/SQL (np. UTL_FILE.FGETATTR lub DBMS_LOB.FILEEXISTS dla BFILE).
- Oracle nie wspiera ls, mkdir, rm w stylu Linuxa – potrzebne są zewnętrzne skrypty lub rozszerzenia (np. Java w Oracle).
- Można utworzyć wiele katalogów wskazujących na ten sam folder
- Nazwy są unikalne w obrębie bazy, ale mogą wskazywać ten sam DIRECTORY_PATH.