
Oracle 데이터베이스에서 DBA_DIRECTORIES 뷰는 파일 시스템과 데이터베이스를 연결하는 중요한 브리지 역할을 합니다. 이 뷰는 데이터베이스 내에서 정의된 모든 디렉터리 객체(Directory Object)에 대한 정보를 제공합니다. 즉, 서버의 물리적 경로를 데이터베이스 객체로 매핑하여 외부 파일 입출력(External File I/O), 데이터 로드, UTL_FILE 패키지 사용 등 다양한 작업을 안전하게 수행할 수 있도록 관리하는 핵심 구성요소입니다.
1. DBA_DIRECTORIES 개요
DBA_DIRECTORIES는 데이터베이스 관리자가 생성한 모든 디렉터리 객체의 정보를 보여주는 데이터 사전 뷰입니다. 이 디렉터리 객체는 실제 운영체제의 파일 시스템 경로를 데이터베이스 내에서 논리적으로 접근할 수 있도록 설정한 것입니다. 예를 들어, 데이터베이스에서 외부 CSV 파일을 읽거나 SQL*Loader, Data Pump, UTL_FILE 등을 통해 데이터를 내보낼 때 Oracle은 직접 경로를 지정하지 않고, 디렉터리 객체를 통해 파일 위치를 참조합니다. 따라서 DBA_DIRECTORIES 뷰는 Oracle 서버에서 파일 접근의 보안성과 효율성을 유지하기 위해 매우 중요한 역할을 합니다.
2. 주요 컬럼 설명
아래 표는 DBA_DIRECTORIES 뷰의 주요 컬럼과 그 의미를 정리한 것입니다.
| 컬럼명 | 데이터 타입 | 설명 |
|---|---|---|
| OWNER | VARCHAR2 | 디렉터리 객체를 소유한 사용자 이름 |
| DIRECTORY_NAME | VARCHAR2 | 디렉터리 객체의 이름 (데이터베이스 내 논리적 식별자) |
| DIRECTORY_PATH | VARCHAR2 | 운영체제에서의 실제 물리적 경로 |
이 중 DIRECTORY_PATH는 Oracle 서버 프로세스가 접근할 수 있는 실제 파일 시스템 경로를 의미하며, 서버 운영체제에서 해당 경로에 대한 읽기/쓰기 권한이 부여되어 있어야 합니다.
3. DBA_DIRECTORIES 조회 예제
현재 데이터베이스에 등록된 모든 디렉터리 객체를 확인하려면 다음과 같은 SQL을 사용할 수 있습니다.
SELECT
OWNER,
DIRECTORY_NAME,
DIRECTORY_PATH
FROM
DBA_DIRECTORIES
ORDER BY
DIRECTORY_NAME;
이 쿼리 결과를 통해 어떤 디렉터리가 존재하고, 실제 파일 시스템의 어느 경로와 연결되어 있는지를 손쉽게 파악할 수 있습니다.
4. 디렉터리 객체 생성과 권한 부여
① 디렉터리 객체 생성
DBA 또는 권한을 가진 사용자는 다음과 같이 디렉터리 객체를 생성할 수 있습니다.
CREATE DIRECTORY export_dir AS '/u01/app/oracle/exports';
위 예제에서 export_dir은 데이터베이스에서 사용할 디렉터리 객체의 이름이고, '/u01/app/oracle/exports'는 실제 서버의 물리적 경로입니다.
② 접근 권한 부여
해당 디렉터리를 다른 사용자에게 사용하도록 허용하려면 다음과 같이 권한을 부여해야 합니다.
GRANT READ, WRITE ON DIRECTORY export_dir TO hr;
이 명령으로 HR 스키마는 export_dir 디렉터리 내 파일을 읽고 쓸 수 있습니다.
5. DBA_DIRECTORIES와 관련된 주요 뷰 비교
Oracle은 파일 접근 관련 여러 데이터 사전 뷰를 제공합니다. DBA_DIRECTORIES는 이 중 디렉터리 객체 자체를 관리하는 중심 뷰로, 다른 관련 뷰들과의 관계를 아래 표에 정리했습니다.
| 뷰 이름 | 역할 | DBA_DIRECTORIES와의 관계 |
|---|---|---|
| ALL_DIRECTORIES | 현재 사용자에게 접근 권한이 있는 디렉터리 목록 | DBA_DIRECTORIES의 하위 집합 |
| USER_DIRECTORIES | 자신이 소유한 디렉터리 정보 | DBA_DIRECTORIES에서 OWNER가 현재 사용자와 동일한 항목만 표시 |
| DBA_TAB_PRIVS | 디렉터리에 부여된 READ/WRITE 권한 관리 | 디렉터리 객체 접근 권한을 추적 가능 |
6. DBA_DIRECTORIES의 활용 사례
① Data Pump Export / Import
Oracle의 Data Pump 도구(expdp/impdp)는 디렉터리 객체를 반드시 사용합니다. 예를 들어, 다음과 같은 명령에서 DIRECTORY=export_dir 옵션이 지정되어야 데이터 덤프 파일을 저장하거나 불러올 수 있습니다.
expdp system/password DIRECTORY=export_dir DUMPFILE=backup2025.dmp LOGFILE=export.log FULL=Y
② UTL_FILE 패키지
PL/SQL에서 파일을 읽고 쓸 때도 디렉터리 객체가 필요합니다. 다음 예제는 UTL_FILE을 사용하여 텍스트 파일을 생성하는 예시입니다.
DECLARE
f UTL_FILE.FILE_TYPE;
BEGIN
f := UTL_FILE.FOPEN('EXPORT_DIR', 'output.txt', 'W');
UTL_FILE.PUT_LINE(f, 'Oracle Directory Test');
UTL_FILE.FCLOSE(f);
END;
이때, 'EXPORT_DIR'은 DBA_DIRECTORIES에 등록된 디렉터리 이름과 일치해야 합니다.
③ 외부 테이블(External Table)
외부 CSV 파일을 테이블처럼 조회하는 External Table 기능에서도 디렉터리 객체가 사용됩니다.
CREATE TABLE ext_sales (
sale_id NUMBER,
sale_date DATE,
amount NUMBER
)
ORGANIZATION EXTERNAL (
TYPE ORACLE_LOADER
DEFAULT DIRECTORY data_dir
ACCESS PARAMETERS (
RECORDS DELIMITED BY NEWLINE
FIELDS TERMINATED BY ','
)
LOCATION ('sales_2025.csv')
);
이 예제에서 data_dir 역시 DBA_DIRECTORIES에 등록되어 있어야 합니다.
7. 보안 및 관리 유의사항
- 파일 접근 제한: 디렉터리 객체는 서버의 파일 시스템에 직접 접근하므로, 반드시 신뢰할 수 있는 경로만 등록해야 합니다.
- 권한 최소화: 불필요한 사용자에게 WRITE 권한을 부여하지 않아야 합니다. (READ 권한만 허용 권장)
- OS 권한 연계: Oracle은 운영체제 계정 권한을 직접 제어하지 않으므로, OS 레벨에서도 파일 권한을 관리해야 합니다.
- 경로 변경 시 주의: DIRECTORY_PATH가 변경되면 Data Pump 및 UTL_FILE 관련 작업이 실패할 수 있으므로, 변경 전 백업이 필수입니다.
8. DBA_DIRECTORIES 관리 팁
- 디렉터리 등록 시 절대경로를 사용하여 명확히 지정
- Data Pump 및 외부 테이블 경로를 주기적으로 검증
- 보안 정책에 따라 권한을 재검토하고 불필요한 디렉터리 삭제
- OS와 DB 디렉터리 간의 경로 동기화를 유지
9. 요약 비교표
| 항목 | DBA_DIRECTORIES | ALL_DIRECTORIES |
|---|---|---|
| 조회 범위 | 모든 사용자 소유 디렉터리 | 현재 사용자가 접근 가능한 디렉터리 |
| 권한 필요 여부 | DBA 권한 필요 | 사용자별 접근 권한 기준 |
| 주요 활용 | Data Pump, UTL_FILE, External Table 관리 | 사용자 단위 접근 제어 및 확인 |
| 핵심 컬럼 | DIRECTORY_NAME, DIRECTORY_PATH | DIRECTORY_NAME, DIRECTORY_PATH |
10. 결론
DBA_DIRECTORIES는 Oracle의 파일 입출력 관리에서 가장 중요한 데이터 사전 뷰 중 하나입니다. 이 뷰를 이해하고 올바르게 관리하면 데이터베이스와 운영체제 간 파일 연동을 효율적이고 안전하게 수행할 수 있습니다. Data Pump, External Table, UTL_FILE 같은 기능은 모두 이 디렉터리 객체에 의존하기 때문에, DBA는 항상 디렉터리 정의를 최신 상태로 유지하고 보안 정책에 맞게 관리해야 합니다.
출처
- Oracle Database Reference 19c – DBA_DIRECTORIES View
- Oracle Database Utilities – Data Pump Export/Import
- Oracle PL/SQL Packages and Types Reference – UTL_FILE