메뉴
Amazon Relational Database Service
사용 설명서 (API Version 2014-10-31)

데이터를 Amazon RDS의 Oracle로 가져오기

데이터를 Amazon RDS DB 인스턴스로 가져오는 방법은 보유한 데이터의 양과 데이터베이스에 있는 데이터베이스 객체의 개수 및 다양성에 따라 달라집니다. 예를 들어 Oracle SQL Developer를 사용하여 간단한 20MB 데이터베이스를 가져올 수 있습니다. 또한 Oracle Data Pump를 사용하여 수백 메가바이트나 몇 테라바이트 크기의 데이터베이스나 복합 데이터베이스를 가져올 수 있습니다.

AWS Database Migration Service(AWS DMS)를 사용하여 데이터를 Amazon RDS DB 인스턴스로 가져올 수도 있습니다. AWS DMS는 가동 중지 없이 데이터베이스를 마이그레이션할 수 있으며 대부분의 데이터베이스 엔진에서는 대상 데이터베이스로 전환할 준비가 될 때까지 지속적으로 복제를 계속할 수 있습니다. AWS DMS를 사용하여 동일하거나 다른 데이터베이스 엔진에서 Oracle로 마이그레이션할 수 있습니다. 다른 데이터베이스 엔진에서 마이그레이션하는 경우 AWS Schema Conversion Tool을 사용하여 AWS DMS를 통해 마이그레이션되지 않는 스키마 객체를 마이그레이션할 수 있습니다. AWS DMS에 대한 자세한 내용은 AWS Database Migration Service란 무엇입니까? 단원을 참조하십시오.

이러한 마이그레이션 기술 중 하나를 사용하려면 먼저 데이터베이스 백업 모범 사례를 따르는 것이 좋습니다. 스냅샷을 생성하여 Amazon RDS 인스턴스를 백업할 수 있습니다. 나중에 스냅샷에서 데이터베이스를 복구할 수 있습니다. 자세한 내용은 Amazon RDS DB 인스턴스 백업 및 복원 단원을 참조하십시오.

Oracle SQL Developer

작은 데이터베이스의 경우 Oracle에서 무상으로 배포한 그래픽 Java 도구인 Oracle SQL Developer를 사용할 수 있습니다. 데스크톱 컴퓨터(Windows, Linux 또는 Mac) 또는 서버 중 하나에 이 도구를 설치할 수 있습니다. Oracle SQL Developer는 두 Oracle 데이터베이스 간의 데이터 마이그레이션이나 MySQL 등의 다른 데이터베이스에서 Oracle로 데이터 마이그레이션을 위한 옵션을 제공합니다. Oracle SQL Developer는 작은 데이터베이스를 마이그레이션하는 데 매우 적합합니다. 데이터 마이그레이션을 시작하기 전에 Oracle SQL Developer 제품을 읽는 것이 좋습니다.

SQL Developer를 설치한 후에는 SQL Developer를 사용하여 원본 및 대상 데이터베이스에 연결할 수 있습니다. [Tools] 메뉴의 [Database Copy] 명령을 사용하여 데이터를 Amazon RDS 인스턴스로 복사합니다.

Oracle SQL Developer를 다운로드하려면 http://www.oracle.com/technetwork/developer-tools/sql-developer을(를) 참조하십시오.

Oracle에서는 MySQL 및 SQL Server 등 다른 데이터베이스에서 마이그레이션하는 방법을 설명하는 문서도 제공합니다. 자세한 내용은 Oracle 설명서에서 http://www.oracle.com/technetwork/database/migration을(를) 참조하십시오.

Oracle Data Pump

Oracle Data Pump는 Oracle Export/Import 유틸리티를 장기적으로 대체하며 Oracle 설치에서 Amazon RDS DB 인스턴스로 대량의 데이터를 이동하는 기본적인 방법입니다. 다음과 같은 여러 시나리오에 대해 Oracle Data Pump를 사용할 수 있습니다.

  • Oracle 데이터베이스를 포함하는 Amazon EC2 인스턴스의 데이터를 Oracle DB 인스턴스로 가져오기

  • Oracle DB 인스턴스에 있는 데이터베이스의 데이터를 다른 Oracle DB 인스턴스로 가져오기

  • VPC의 Oracle DB 인스턴스에 있는 데이터베이스의 데이터를 또 다른 Oracle DB 인스턴스(VPC 사용 무관)로 가져오기

  • 로컬 Oracle 데이터베이스의 데이터를 Amazon RDS DB 인스턴스로 가져오기

다음 프로세스에서는 Oracle Data Pump 및 DBMS_FILE_TRANSFER 패키지를 사용합니다. 이 프로세스는 Oracle 인스턴스에 연결되며 Oracle Data Pump를 사용하여 데이터를 내보냅니다. 그런 다음 DBMS_FILE_TRANSFER.PUT_FILE 메서드를 사용하여 Oracle 인스턴스의 덤프 파일을 데이터베이스 링크를 통해 연결된 대상 DB 인스턴스의 DATA_PUMP_DIR로 복사합니다. 마지막 단계에서는 복사된 덤프 파일의 데이터를 RDS 인스턴스로 가져옵니다.

이 프로세스를 수행하려면 다음 요구 사항이 충족되어야 합니다.

  • DBMS_FILE_TRANSFER 패키지에 대한 실행 권한이 있어야 합니다.

  • 대상 DB 인스턴스가 버전 11.2.0.2.v6 이상이어야 합니다.

  • 원본 DB 인스턴스의 DATA_PUMP_DIR 디렉터리에 대한 쓰기 권한이 있어야 합니다.

  • 원본 인스턴스 및 대상 DB 인스턴스에 덤프 파일을 저장할 수 있는 충분한 스토리지 공간이 있는지 확인해야 합니다.

참고

이 프로세스는 덤프 파일을 모든 Oracle DB 인스턴스의 사전 구성된 디렉터리인 DATA_PUMP_DIR 디렉터리로 가져옵니다. 이 디렉터리는 데이터 파일과 동일한 스토리지 볼륨에 위치합니다. 덤프 파일을 가져오는 경우 기존 Oracle 데이터 파일에 더 많은 공간이 사용되므로 DB 인스턴스에서 추가 공간의 사용을 지원할 수 있는지도 확인해야 합니다. 가져온 덤프 파일은 자동으로 삭제되거나 DATA_PUMP_DIR 디렉터리에서 제거됩니다. UTL_FILE.FREMOVE를 사용하여 가져온 덤프 파일을 제거합니다.

Oracle Data Pump 및 DBMS_FILE_TRANSFER 패키지를 사용하는 가져오기 프로세스는 다음 단계로 이루어집니다.

  • 1단계: 원본 데이터베이스의 사용자에게 권한 부여

  • 2단계: DBMS_DATAPUMP를 사용하여 덤프 파일 생성

  • 3단계: 대상 DB 인스턴스의 데이터베이스 링크 생성

  • 4단계: 내보낸 덤프 파일을 DBMS_FILE_TRANSFER를 사용하여 Amazon RDS 인스턴스로 복사

  • 5단계: 덤프 파일을 Amazon RDS 인스턴스의 데이터베이스로 가져오기

  • 6단계: 정리

1단계: 원본 데이터베이스의 사용자에게 권한 부여

SQL Plus 또는 Oracle SQL Developer를 사용하여 가져올 데이터를 포함하는 Oracle 인스턴스에 연결합니다. 필요할 경우 사용자 계정을 생성하고 필요한 권한을 부여합니다.

다음 명령은 새 사용자를 생성하고 필요한 권한을 부여합니다.

Copy
SQL> create user USER1 identified by test123; SQL> grant create session, create table to USER1; SQL> alter user USER1 quota 100M on users; SQL> grant read, write on directory data_pump_dir to USER1; SQL> grant execute on dbms_datapump to USER1;

자신의 고유 테이블을 사용하거나 새로운 테이블을 생성하여 프로세스를 테스트할 수 있습니다. 다음 명령은 DB 인스턴스로 가져올 샘플 테이블을 생성합니다.

Copy
SQL> create table USER1.tab1 tablespace users as select 'USER1_'||object_name str_col, sysdate dt_col from all_objects;

2단계: DBMS_DATAPUMP를 사용하여 덤프 파일 생성

SQL Plus 또는 Oracle SQL Developer를 사용하여 Oracle 인스턴스에 연결하고 Oracle Data Pump 유틸리티를 사용하여 덤프 파일을 생성합니다. 다음 스크립트는 DATA_PUMP_DIR 디렉터리에 tab1.dmp라는 덤프 파일을 생성합니다.

Copy
DECLARE hdnl NUMBER; BEGIN hdnl := DBMS_DATAPUMP.open( operation => 'EXPORT', job_mode => 'SCHEMA', job_name=>null); DBMS_DATAPUMP.ADD_FILE( handle => hdnl, filename => 'tab1.dmp', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_dump_file); DBMS_DATAPUMP.add_file( handle => hdnl, filename => 'exp.log', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_log_file); DBMS_DATAPUMP.METADATA_FILTER(hdnl,'SCHEMA_EXPR','IN (''USER1'')'); DBMS_DATAPUMP.start_job(hdnl); END; /

3단계: 대상 DB 인스턴스의 데이터베이스 링크 생성

다음으로 원본 인스턴스와 대상 DB 인스턴스 간의 데이터베이스 링크를 생성합니다. 데이터베이스 링크를 생성하고 내보내기 파일을 전송하려면 로컬 Oracle 인스턴스가 DB 인스턴스와 네트워크로 연결되어 있어야 합니다.

동일한 VPC 또는 피어링된 VPC 내에서 두 DB 인스턴스 간에 데이터베이스 링크를 생성하려면 두 DB 인스턴스에 서로에게 이르는 유효한 경로가 있어야 합니다. 각 DB 인스턴스의 보안 그룹은 다른 DB 인스턴스로(부터)의 수신 및 발신을 허용해야 합니다. 보안 그룹 인바운드 또는 아웃바운드 규칙은 동일한 VPC 또는 피어링된 VPC에서 보안 그룹을 참조할 수 있습니다. 자세한 내용은 VPC의 DB 인스턴스에 사용하기 위한 데이터베이스 링크 조정을(를) 참조하십시오.

다음 명령은 대상 DB 인스턴스 데이터베이스의 다른 사용자와의 to_rds라는 데이터베이스 링크를 생성합니다.

Copy
create database link to_rds connect to USER2 identified by user2pwd using '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=<dns or ip address of remote db>)(PORT=<listener port>))(CONNECT_DATA=(SID=<remoteSID>)))';

4단계: 내보낸 덤프 파일을 DBMS_FILE_TRANSFER를 사용하여 Amazon RDS DB 인스턴스로 복사

다음으로 DBMS_FILE_TRANSFER를 사용하여 원본 데이터베이스의 덤프 파일을 대상 DB 인스턴스로 복사합니다. 다음 스크립트는 원본 인스턴스에 있는 tab1.dmp라는 덤프 파일을 to_rds(이전 단계에서 생성됨)라는 대상 데이터베이스 링크로 복사합니다.

Copy
BEGIN DBMS_FILE_TRANSFER.PUT_FILE( source_directory_object => 'DATA_PUMP_DIR', source_file_name => 'tab1.dmp', destination_directory_object => 'DATA_PUMP_DIR', destination_file_name => 'tab1_copied.dmp', destination_database => 'to_rds' ); END; /

5단계: 대상 인스턴스에 필요한 테이블 공간 생성

데이터를 가져오려면 먼저 테이블 공간을 생성해야 합니다. 자세한 내용은 테이블스페이스 생성과 크기 조정을(를) 참조하십시오.

6단계: Data Pump를 사용하여 DB 인스턴스의 데이터 파일 가져오기

DB 인스턴스에서 Oracle Data Pump를 사용하여 스키마를 가져옵니다. 목록의 첫 번째 부분은 데이터 가져오기 문의 형식을 보여 주며, 두 번째 부분은 tab1_copied.dmp라는 데이터 파일의 가져오기를 보여 줍니다. REMAP_TABLESPACE 등 추가 옵션이 필요할 수 있습니다.

Copy
impdp <username>@<TNS_ENTRY> DUMPFILE=user1copied.dmp DIRECTORY=DATA_PUMP_DIR full=y impdp copy1@copy1 DUMPFILE=tab1_copied.dmp DIRECTORY=DATA_PUMP_DIR full=y

DB 인스턴스에서 해당 테이블을 보고 데이터 가져오기를 확인할 수 있습니다.

Copy
SQL> select count(*) from user1.tab1;

7단계: 정리

데이터를 가져온 후에는 더 이상 유지하지 않을 파일을 삭제할 수 있습니다. 다음 명령을 사용하여 DATA_PUMP_DIR에서 파일을 나열할 수 있습니다.

Copy
select * from table(RDSADMIN.RDS_FILE_UTIL.LISTDIR('DATA_PUMP_DIR')) order by mtime;

참고

RDSADMIN.RDS_FILE_UTIL.LISTDIR은 버전 11.2.0.2에서 사용할 수 없습니다.

다음 명령은 DATA_PUMP_DIR에서 더 이상 필요하지 않은 파일을 삭제하는 데 사용할 수 있습니다.

Copy
exec utl_file.fremove('DATA_PUMP_DIR','[file name]');

예를 들어, 다음 명령은 "test_dbms_lob.txt"라는 파일을 삭제합니다.

Copy
exec utl_file.fremove('DATA_PUMP_DIR','test_dbms_lob.txt');

Oracle Export/Import 유틸리티

Oracle Export/Import 유틸리티는 데이터 크기가 작고 이진 부동 소수점 수 및 실수 등의 데이터 형식이 필요하지 않은 마이그레이션에 적합합니다. 가져오기 프로세스는 스키마 객체를 생성하므로 스키마 객체를 생성하기 위해 먼저 스크립트를 실행할 필요가 없습니다. 따라서 이 프로세스는 작은 테이블을 포함하는 데이터베이스에 매우 적합합니다. 다음 예에서는 이러한 유틸리티를 사용하여 특정 테이블을 내보내고 가져오는 방법을 설명합니다.

아래 명령을 사용하여 원본 데이터베이스에서 테이블을 내보냅니다. 해당되는 경우 사용자 이름/암호를 대체합니다.

Copy
exp cust_dba@ORCL FILE=exp_file.dmp TABLES=(tab1,tab2,tab3) LOG=exp_file.log

내보내기 프로세스에서는 지정된 테이블에 대한 스키마 및 데이터를 모두 포함하는 이진 덤프 파일을 생성합니다. 이제 다음 명령을 사용하여 이 스키마와 데이터를 대상 데이터베이스로 가져올 수 있습니다.

Copy
imp cust_dba@targetdb FROMUSER=cust_schema TOUSER=cust_schema \ TABLES=(tab1,tab2,tab3) FILE=exp_file.dmp LOG=imp_file.log

사용자의 필요에 맞는 다양한 Export 및 Import 명령 버전이 있습니다. 자세한 내용은 Oracle 설명서을(를) 참조하십시오.

Oracle SQL*Loader

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

  1. 아래 명령을 사용하여 샘플 원본 테이블을 생성합니다.

    Copy
    create table customer_0 tablespace users as select rownum id, o.* from all_objects o, all_objects x where rownum <= 1000000;
  2. 대상 Amazon RDS 인스턴스에서 데이터를 로드하는 데 사용될 대상 테이블을 생성합니다.

    Copy
    create table customer_1 tablespace users as select 0 as id, owner, object_name, created from all_objects where 1=2;
  3. 원본 데이터베이스의 데이터를 일반 파일(구분 기호 사용)로 내보냅니다. 이 예에서는 이를 위해 SQL*Plus를 사용합니다. 실제 데이터의 경우 대개 데이터베이스의 모든 객체에 대한 내보내기를 수행하는 스크립트를 생성해야 할 것입니다.

    Copy
    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. 데이터를 설명하는 제어 파일을 생성해야 합니다. 앞에서 말했듯이, 데이터에 따라 이 단계를 수행하는 스크립트를 빌드해야 합니다.

    Copy
    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를 사용하여 데이터를 가져옵니다.

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

Oracle 구체화 보기

Oracle 구체화 보기 복제를 사용하여 최신 데이터 세트를 효율적으로 마이그레이션할 수 있습니다. 복제를 통해 대상 테이블을 지속적으로 원본과 동일한 상태로 유지할 수 있으므로 필요할 경우 나중에 Amazon RDS로 실제 전환을 수행할 수 있습니다. 복제는 Amazon RDS 인스턴스에서 원본 데이터베이스로 연결되는 데이터베이스 링크를 사용하여 설정됩니다.

구체화 보기의 한 가지 요구 사항은 대상 데이터베이스에서 원본 데이터베이스로의 액세스를 허용해야 한다는 점입니다. 다음 예시에서는 SQLNet을 통해 Amazon RDS 대상 데이터베이스가 원본에 연결할 수 있도록 원본 데이터베이스에서 액세스 규칙이 활성화되었습니다.

  1. 원본 및 Amazon RDS 대상 인스턴스 모두에서 동일한 암호로 인증할 수 있는 사용자 계정을 생성합니다.

    Copy
    create user dblink_user identified by password default tablespace users temporary tablespace temp; grant create session to dblink_user; grant select any table to dblink_user; grant select any dictionary to dblink_user;
  2. 새로 생성된 dblink_user를 사용하여 Amazon RDS 대상 인스턴스에서 원본 인스턴스로 연결되는 데이터베이스 링크를 생성합니다.

    Copy
    create database link remote_site connect to dblink_user identified by password using '(description=(address=(protocol=tcp) (host=<myhost>) (port=<listener port>)) (connect_data=(sid=<sourcedb sid>)))';
  3. 링크를 테스트합니다.

    Copy
    select * from v$instance@remote_site;
  4. 원본 인스턴스에서 주 키와 구체화 보기 로그를 사용하여 샘플 테이블을 생성합니다.

    Copy
    create table customer_0 tablespace users as select rownum id, o.* from all_objects o, all_objects x where rownum <= 1000000; alter table customer_0 add constraint pk_customer_0 primary key (id) using index; create materialized view log on customer_0;
  5. 대상 Amazon RDS 인스턴스에서 구체화된 보기를 생성합니다.

    Copy
    CREATE MATERIALIZED VIEW customer_0 BUILD IMMEDIATE REFRESH FAST AS SELECT * FROM cust_dba.customer_0@remote_site;