

# Oracle SQL\$1Loader를 사용하여 가져오기
<a name="Oracle.Procedural.Importing.SQLLoader"></a>

객체 수가 제한되어 있는 대규모 데이터베이스의 경우 Oracle SQL\$1Loader를 사용할 수도 있습니다. 원본 데이터베이스에서 내보내고 대상 데이터베이스로 로드하는 프로세스는 스키마와 매우 밀접한 관계가 있으므로, 다음 예에서는 샘플 스키마 객체를 생성하여 원본에서 내보내고 대상 데이터베이스에 로드합니다.

Oracle SQL\$1Loader를 설치하는 가장 쉬운 방법은 Oracle Instant Client를 설치하는 것입니다. 소프트웨어를 다운로드하려면 [https://www.oracle.com/database/technologies/instant-client.html](https://www.oracle.com/database/technologies/instant-client.html)을 방문하세요. 설명서를 보려면 *Oracle Database 유틸리티* 설명서의 [SQL\$1Loader, 내보내기, 가져오기를 위한 Instant Client](https://docs.oracle.com/en/database/oracle/oracle-database/21/sutil/instant-client-sql-loader-export-import.html#GUID-FF1B6F75-09F5-4911-9317-9776FAD15965)를 참조하세요.

**Oracle SQL\$1Loader를 사용하여 데이터를 가져오려면**

1. 다음 SQL 문을 사용해 샘플 원본 테이블을 생성합니다.

   ```
   CREATE TABLE customer_0 TABLESPACE users 
      AS (SELECT ROWNUM id, o.* 
          FROM   ALL_OBJECTS o, ALL_OBJECTS x 
          WHERE  ROWNUM <= 1000000);
   ```

1. 대상 RDS for Oracle DB 인스턴스에서 데이터를 로드하는 데 사용되는 대상 테이블을 생성합니다. `WHERE 1=2` 절을 사용하면 `ALL_OBJECTS`의 구조를 복사하지만 행은 복사하지 않게 됩니다.

   ```
   CREATE TABLE customer_1 TABLESPACE users 
     AS (SELECT 0 AS ID, OWNER, OBJECT_NAME, CREATED
         FROM   ALL_OBJECTS
         WHERE  1=2);
   ```

1. 원본 데이터베이스의 데이터를 텍스트 파일로 내보냅니다. 다음 예에서는 SQL\$1Plus를 사용합니다. 실제 데이터의 경우 대개 데이터베이스의 모든 객체에 대한 내보내기를 수행하는 스크립트를 생성해야 할 것입니다.

   ```
   ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY/MM/DD HH24:MI:SS'
   
   SET LINESIZE 800 HEADING OFF FEEDBACK OFF ARRAY 5000 PAGESIZE 0
   SPOOL customer_0.out 
   SET MARKUP HTML PREFORMAT ON
   SET COLSEP ','
   
   SELECT id, owner, object_name, created 
   FROM   customer_0; 
   
   SPOOL OFF
   ```

1. 데이터를 설명하는 제어 파일을 생성해야 합니다. 이 단계를 수행하려면 스크립트를 작성해야 할 수 있습니다.

   ```
   cat << EOF > sqlldr_1.ctl 
   load data
   infile customer_0.out
   into table customer_1
   APPEND
   fields terminated by "," optionally enclosed by '"'
   (
     id           POSITION(01:10)    INTEGER EXTERNAL,
     owner        POSITION(12:41)    CHAR,
     object_name  POSITION(43:72)    CHAR,
     created      POSITION(74:92)    date "YYYY/MM/DD HH24:MI:SS"
   )
   ```

   필요할 경우 이전 코드에서 생성된 파일을 Amazon EC2 인스턴스 등의 스테이징 영역으로 복사합니다.

1. 대상 데이터베이스에 대한 적절한 사용자 이름 및 암호와 함께 SQL\$1Loader를 사용하여 데이터를 가져옵니다.

   ```
   sqlldr cust_dba@targetdb CONTROL=sqlldr_1.ctl BINDSIZE=10485760 READSIZE=10485760 ROWS=1000 
   ```