Oracle SQL*Loader를 사용하여 가져오기 - Amazon Relational Database Service

Oracle SQL*Loader를 사용하여 가져오기

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

Oracle SQL*Loader를 설치하는 가장 쉬운 방법은 Oracle Instant Client를 설치하는 것입니다. 소프트웨어를 다운로드하려면 https://www.oracle.com/database/technologies/instant-client.html을 방문하세요. 설명서를 보려면 Oracle Database 유틸리티 설명서의 SQL*Loader, 내보내기, 가져오기를 위한 Instant Client를 참조하세요.

Oracle SQL*Loader를 사용하여 데이터를 가져오려면
  1. 다음 SQL 문을 사용해 샘플 원본 테이블을 생성합니다.

    CREATE TABLE customer_0 TABLESPACE users AS (SELECT ROWNUM id, o.* FROM ALL_OBJECTS o, ALL_OBJECTS x WHERE ROWNUM <= 1000000);
  2. 대상 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);
  3. 원본 데이터베이스의 데이터를 텍스트 파일로 내보냅니다. 다음 예에서는 SQL*Plus를 사용합니다. 실제 데이터의 경우 대개 데이터베이스의 모든 객체에 대한 내보내기를 수행하는 스크립트를 생성해야 할 것입니다.

    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
  4. 데이터를 설명하는 제어 파일을 생성해야 합니다. 이 단계를 수행하려면 스크립트를 작성해야 할 수 있습니다.

    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 인스턴스 등의 스테이징 영역으로 복사합니다.

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

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