

# RDS for Oracle의 외부 테이블 작업
<a name="Appendix.Oracle.CommonDBATasks.External_Tables"></a>

*Oracle 외부 테이블*이란 데이터가 데이터베이스에 저장되어 있지 않은 테이블을 말합니다. 오히려 데이터베이스가 액세스할 수 있는 외부 파일에 데이터가 저장되어 있습니다. 외부 테이블을 사용하면 데이터베이스에 테이블을 로드하지 않고도 데이터에 액세스할 수 있습니다. 외부 테이블에 대한 자세한 내용은 Oracle 설명서에서 [Managing External Tables](http://docs.oracle.com/database/121/ADMIN/tables.htm#ADMIN01507)를 참조하세요.

Amazon RDS에서는 외부 테이블 파일을 디렉터리 객체에 저장할 수 있습니다. 디렉터리 객체는 생성할 수도 있지만, DATA\$1PUMP\$1DIR 디렉터리처럼 Oracle 데이터베이스에 사전 정의되어 있는 객체를 사용할 수도 있습니다. 디렉터리 객체 생성에 대한 자세한 내용은 [메인 데이터 스토리지 공간에서 디렉터리 생성 및 삭제](Appendix.Oracle.CommonDBATasks.Misc.md#Appendix.Oracle.CommonDBATasks.NewDirectories) 섹션을 참조하세요. ALL\$1DIRECTORIES 뷰에 대한 쿼리를 실행하여 Amazon RDS Oracle DB 인스턴스의 디렉터리 객체 목록을 조회할 수 있습니다.

**참고**  
디렉터리 객체는 인스턴스에서 사용하는 메인 데이터 스토리지 공간(Amazon EBS 볼륨)을 가리킵니다. 데이터 파일, 재실행 로그, 감사, 트레이스 및 기타 파일 등에 사용되는 공간은 할당된 공간에서 차감됩니다.

외부 데이터 파일은 [ DBMS\$1FILE\$1TRANSFER](https://docs.oracle.com/database/121/ARPLS/d_ftran.htm#ARPLS095) 패키지 또는 [UTL\$1FILE](https://docs.oracle.com/database/121/ARPLS/u_file.htm#ARPLS069) 패키지를 사용하여 Oracle 데이터베이스에서 다른 Oracle 데이터베이스로 이동시킬 수 있습니다. 그러면 원본 데이터베이스의 디렉터리에서 대상 데이터베이스의 특정 디렉터리로 외부 데이터 파일이 이동합니다. `DBMS_FILE_TRANSFER` 사용에 대한 자세한 내용은 [Oracle Data Pump를 사용한 가져오기](Oracle.Procedural.Importing.DataPump.md)을 참조하세요.

외부 데이터 파일을 이동시켰으면 이제 이 파일을 이용해 외부 테이블을 생성할 수 있습니다. 다음 예에서는 USER\$1DIR1 디렉터리의 `emp_xt_file1.txt` 파일을 사용하는 외부 테이블을 생성합니다.

```
CREATE TABLE emp_xt (
  emp_id      NUMBER,
  first_name  VARCHAR2(50),
  last_name   VARCHAR2(50),
  user_name   VARCHAR2(20)
)
ORGANIZATION EXTERNAL (
  TYPE ORACLE_LOADER
  DEFAULT DIRECTORY USER_DIR1
  ACCESS PARAMETERS (
    RECORDS DELIMITED BY NEWLINE
    FIELDS TERMINATED BY ','
    MISSING FIELD VALUES ARE NULL
    (emp_id,first_name,last_name,user_name)
  )
  LOCATION ('emp_xt_file1.txt')
)
PARALLEL
REJECT LIMIT UNLIMITED;
```

예를 들어 Amazon RDS Oracle DB 인스턴스에 저장된 데이터를 외부 데이터 파일로 이동시킨다고 가정하겠습니다. 이때는 외부 테이블을 생성한 후 데이터베이스 테이블에서 데이터를 선택하여 외부 데이터 파일을 채울 수 있습니다. 다음은 데이터베이스의 `orders_xt` 테이블에 대해 쿼리를 실행하여 `orders` 외부 테이블을 생성하는 SQL 문입니다.

```
CREATE TABLE orders_xt
  ORGANIZATION EXTERNAL
   (
     TYPE ORACLE_DATAPUMP
     DEFAULT DIRECTORY DATA_PUMP_DIR
     LOCATION ('orders_xt.dmp')
   )
   AS SELECT * FROM orders;
```

위 예제에서는 DATA\$1PUMP\$1DIR 디렉터리의 `orders_xt.dmp` 파일이 데이터로 채워집니다.