본문 바로가기
Database/Oracle

[ORACLE] DBA_DIRECTORIES 완벽 해설 : Oracle 디렉터리 오브젝트의 핵심 이해

by Papa Martino V 2025. 10. 14.
728x90

DBA_DIRECTORIES
[ORACLE] DBA_DIRECTORIES

 

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
728x90