Oracle Data Pump를 사용한 가져오기 - Amazon Relational Database Service

Oracle Data Pump를 사용한 가져오기

Oracle Data Pump는 Oracle 데이터를 덤프 파일로 내보내고 다른 Oracle 데이터베이스로 가져올 수 있는 유틸리티입니다. Oracle Data Pump는 Oracle 내보내기/가져오기 유틸리티를 장기적으로 대체합니다. Oracle Data Pump는 Oracle 데이터베이스에서 Amazon RDS DB 인스턴스로 대량의 데이터를 이동하는 기본적인 방법입니다.

이 섹션의 예에서는 Oracle 데이터베이스로 데이터를 가져오는 한 방법만 설명하지만, Oracle Data Pump는 다른 여러 가져오기 방법을 지원합니다. 자세한 내용은 Oracle 데이터베이스 설명서를 참조하세요.

이 부분의 예제에서는 DBMS_DATAPUMP 패키지를 사용합니다. Oracle Data Pump 명령줄 유틸리티 impdpexpdp를 사용하여 동일한 작업을 수행할 수 있습니다. Oracle 인스턴트 클라이언트를 포함하여 Oracle 클라이언트 설치의 일부로 원격 호스트에 이러한 유틸리티를 설치할 수 있습니다. 자세한 내용을 알아보려면 Oracle Instant Client를 사용하여 Amazon RDS for Oracle DB 인스턴스에 대해 Data Pump 가져오기 또는 내보내기를 실행하려면 어떻게 해야 합니까?를 참조하세요.

Oracle Data Pump 개요

Oracle Data Pump는 다음 구성 요소로 이루어집니다.

  • 명령줄 클라이언트 expdpimpdp

  • DBMS_DATAPUMP PL/SQL 패키지

  • DBMS_METADATA PL/SQL 패키지

다음 시나리오에 Oracle Data Pump를 사용하면 됩니다.

  • Oracle 데이터베이스(온프레미스 또는 Amazon EC2 인스턴스 중 하나)에서 RDS for Oracle DB 인스턴스로 데이터를 가져옵니다.

  • RDS for Oracle DB 인스턴스에서 Oracle 데이터베이스(온프레미스 또는 Amazon EC2 인스턴스)로 데이터를 가져옵니다.

  • RDS for Oracle DB 인스턴스 간에 데이터를 가져옵니다(예: EC2-Classic에서 VPC로 데이터 마이그레이션).

Oracle Data Pump 유틸리티를 다운로드하려면 Oracle Technology Network 웹사이트의 Oracle 데이터베이스 소프트웨어 다운로드를 참조하세요. Oracle 데이터베이스 버전 간에 마이그레이션할 때 호환성 고려 사항은 Oracle 데이터베이스 설명서를 참조하세요.

Oracle Data Pump 워크플로우

일반적으로 Oracle Data Pump를 사용하는 단계는 다음과 같습니다.

  1. 데이터를 소스 데이터베이스의 덤프 파일로 내보냅니다.

  2. 덤프 파일을 대상 RDS for Oracle DB 인스턴스로 업로드합니다. Amazon S3 버킷을 사용하거나 두 데이터베이스 간 데이터베이스 링크를 사용하여 전송할 수 있습니다.

  3. 덤프 파일의 데이터를 RDS for Oracle DB 인스턴스로 가져옵니다.

Oracle Data Pump 모범 사례

Oracle Data Pump를 사용하여 데이터를 RDS for Oracle 인스턴스로 가져오는 경우 다음과 같은 모범 사례를 적용하는 것이 좋습니다.

  • 특정 스키마 및 객체를 가져오려면 schema 또는 table 모드로 가져오기를 수행하십시오.

  • 가져오는 스키마를 애플리케이션에 필요한 스키마로 제한하십시오.

  • full 모드로 가져오거나 시스템 유지관리 구성 요소의 스키마를 가져오지 않습니다.

    RDS for Oracle은 SYS 또는 SYSDBA 관리 사용자에 대한 액세스를 허용하지 않으므로 이 작업을 수행하면 Oracle 데이터 딕셔너리가 손상되고 데이터베이스 안정성에 영향을 줄 수 있습니다.

  • 대량의 데이터를 로드할 경우 다음을 수행합니다.

    1. 덤프 파일을 대상 RDS for Oracle DB 인스턴스로 전송합니다.

    2. DB 인스턴스의 스냅샷을 만듭니다.

    3. 가져오기를 테스트하여 성공적으로 수행되는지 확인합니다.

    데이터베이스 구성 요소가 무효화된 경우 DB 인스턴스를 삭제하고 DB 스냅샷에서 다시 생성할 수 있습니다. 복원된 DB 인스턴스에는 DB 스냅샷을 가져왔을 때 DB 인스턴스에 준비된 모든 덤프 파일이 포함됩니다.

  • Oracle Data Pump 내보내기 파라미터 TRANSPORT_TABLESPACES, TRANSPORTABLE 또는 TRANSPORT_FULL_CHECK를 사용하여 생성된 덤프 파일을 가져오지 마세요. RDS for Oracle DB 인스턴스는 이러한 덤프 파일 가져오기를 지원하지 않습니다.

  • SYS, SYSTEM, RDSADMIN, RDSSECRDS_DATAGUARD에 Oracle 스케줄러 객체가 포함되어 있고 다음 범주에 속하는 덤프 파일은 가져오지 마세요.

    • 작업

    • 프로그램

    • Schedules

    • 체인

    • 규칙

    • 평가 컨텍스트

    • 규칙 세트

    RDS for Oracle DB 인스턴스는 이러한 덤프 파일 가져오기를 지원하지 않습니다.

  • 지원되지 않는 Oracle Scheduler 객체를 제외하려면 Data Pump 내보내기 중에 추가 지시문을 사용합니다. DBMS_DATAPUMP를 사용하는 경우 DBMS_METADATA.START_JOB 앞에 METADATA_FILTER를 추가로 넣을 수 있습니다.

    DBMS_DATAPUMP.METADATA_FILTER( v_hdnl, 'EXCLUDE_NAME_EXPR', q'[IN (SELECT NAME FROM SYS.OBJ$ WHERE TYPE# IN (66,67,74,79,59,62,46) AND OWNER# IN (SELECT USER# FROM SYS.USER$ WHERE NAME IN ('RDSADMIN','SYS','SYSTEM','RDS_DATAGUARD','RDSSEC') ) ) ]', 'PROCOBJ' );

    expdp를 사용하는 경우 다음 예에 표시된 exclude 지시문이 포함된 파라미터 파일을 생성합니다. 그런 다음 PARFILE=parameter_file 명령과 함께 expdp을 사용합니다.

    exclude=procobj:"IN (SELECT NAME FROM sys.OBJ$ WHERE TYPE# IN (66,67,74,79,59,62,46) AND OWNER# IN (SELECT USER# FROM SYS.USER$ WHERE NAME IN ('RDSADMIN','SYS','SYSTEM','RDS_DATAGUARD','RDSSEC') ) )"

Oracle Data Pump와 Amazon S3 버킷으로 데이터 가져오기

다음 가져오기 프로세스에서는 Oracle Data Pump와 Amazon S3 버킷을 사용합니다. 단계는 다음과 같습니다.

  1. Oracle DBMS_DATAPUMP 패키지를 사용한 소스 데이터베이스의 데이터를 내보냅니다.

  2. 덤프 파일을 Amazon S3 버킷에 저장합니다.

  3. 덤프 파일을 Amazon S3 버킷에서 대상 RDS for Oracle DB 인스턴스의 DATA_PUMP_DIR 디렉터리로 다운로드합니다.

  4. DBMS_DATAPUMP 패키지를 사용하여 복사된 덤프 파일의 데이터를 RDS for Oracle DB 인스턴스로 가져옵니다.

Oracle Data Pump와 Amazon S3 버킷으로 데이터를 가져오기 위한 요건

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

  • 파일 전송에 Amazon S3 버킷을 사용할 수 있고 Amazon S3 버킷이 DB 인스턴스와 동일한 AWS 리전에 있어야 합니다. 지침을 보려면 Amazon Simple Storage Service 시작 안내서에서 버킷 생성을 참조하세요.

  • Amazon S3 버킷에 업로드하는 객체는 5TB 이하여야 합니다. Amazon S3의 객체 작업에 대한 자세한 내용은 Amazon Simple Storage Service 사용 설명서를 참조하세요.

    참고

    덤프 파일이 5TB를 초과하면 병렬 옵션을 사용하여 Oracle Data Pump 내보내기를 실행할 수 있습니다. 이 작업은 개별 파일에 대해 5TB 제한을 초과하지 않도록 데이터를 여러 덤프 파일로 분산합니다.

  • Amazon S3와 RDS for Oracle 통합을 위한 IAM 권한 구성의 지침에 따라 Amazon RDS 통합을 위한 Amazon S3 버킷을 준비해야 합니다.

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

참고

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

1단계: RDS for Oracle 대상 DB 인스턴스의 데이터베이스 사용자에게 권한 부여

이 단계에서는 데이터를 가져올 스키마를 생성하고 사용자에게 필요한 권한을 부여합니다.

사용자를 생성하고 RDS for Oracle 대상 인스턴스에 필요한 권한을 부여하는 방법
  1. SQL*Plus 또는 Oracle SQL Developer를 사용하여 데이터를 가져올 RDS for Oracle DB 인스턴스에 마스터 사용자로 로그인합니다. DB 인스턴스 연결에 대한 정보는 RDS for Oracle DB 인스턴스에 연결 섹션을 참조하세요.

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

  3. 사용자 계정을 생성하고 데이터를 가져올 사용자 계정이 없는 경우 필요한 권한 및 역할을 부여합니다. 데이터를 다수의 사용자 스키마로 가져오려는 경우에는 사용자 계정을 각각 생성한 후에 필요한 권한과 역할을 부여합니다.

    예를 들어 다음 SQL 문은 새로운 사용자를 생성하고 해당 사용자가 소유한 스키마에 데이터를 가져오는 데 필요한 권한과 역할을 부여합니다. 다음 단계에서 schema_1을 이 단계의 스키마 이름으로 대체합니다.

    CREATE USER schema_1 IDENTIFIED BY my_password; GRANT CREATE SESSION, RESOURCE TO schema_1; ALTER USER schema_1 QUOTA 100M ON users;
    참고

    보안 모범 사례로 여기에 표시된 프롬프트 이외의 암호를 지정하는 것이 좋습니다.

    위 문은 새로운 사용자에게 CREATE SESSION 권한과 RESOURCE 역할을 부여합니다. 어떤 데이터베이스 객체를 가져오느냐에 따라 권한과 역할이 추가로 필요할 수 있습니다.

2단계: DBMS_DATAPUMP를 사용하여 데이터를 덤프 파일로 내보내기

덤프 파일을 만들려면 DBMS_DATAPUMP 패키지를 사용합니다.

Oracle 데이터를 덤프 파일로 내보내는 방법
  1. SQL Plus 또는 Oracle SQL Developer를 사용하여 관리 사용자 권한으로 소스 RDS for Oracle DB 인스턴스에 연결합니다. 소스 데이터베이스가 RDS for Oracle DB 인스턴스인 경우 Amazon RDS 마스터 사용자 권한으로 연결합니다.

  2. DBMS_DATAPUMP 프로시저를 호출하여 데이터를 내보냅니다.

    다음 스크립트는 SCHEMA_1 스키마를 DATA_PUMP_DIR 디렉터리에 있는 sample.dmp 덤프 파일로 내보냅니다. SCHEMA_1을 내보내려는 스키마 이름으로 바꿉니다.

    DECLARE v_hdnl NUMBER; BEGIN v_hdnl := DBMS_DATAPUMP.OPEN( operation => 'EXPORT', job_mode => 'SCHEMA', job_name => null ); DBMS_DATAPUMP.ADD_FILE( handle => v_hdnl , filename => 'sample.dmp' , directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_dump_file ); DBMS_DATAPUMP.ADD_FILE( handle => v_hdnl, filename => 'sample_exp.log', directory => 'DATA_PUMP_DIR' , filetype => dbms_datapump.ku$_file_type_log_file ); DBMS_DATAPUMP.METADATA_FILTER(v_hdnl,'SCHEMA_EXPR','IN (''SCHEMA_1'')'); DBMS_DATAPUMP.METADATA_FILTER( v_hdnl, 'EXCLUDE_NAME_EXPR', q'[IN (SELECT NAME FROM SYS.OBJ$ WHERE TYPE# IN (66,67,74,79,59,62,46) AND OWNER# IN (SELECT USER# FROM SYS.USER$ WHERE NAME IN ('RDSADMIN','SYS','SYSTEM','RDS_DATAGUARD','RDSSEC') ) ) ]', 'PROCOBJ' ); DBMS_DATAPUMP.START_JOB(v_hdnl); END; /
    참고

    Data Pump는 작업을 비동기적으로 시작합니다. Data Pump 작업 모니터링에 대한 자세한 내용은 Oracle 설명서의 Monitoring Job Status를 참조하세요.

  3. (선택 사항) rdsadmin.rds_file_util.read_text_file 프로시저를 호출하여 내보내기 로그의 내용을 확인할 수 있습니다. 자세한 내용은 DB 인스턴스 디렉터리의 파일 목록 읽기을 참조하세요.

3단계: 덤프 파일을 Amazon S3 버킷에 업로드

Amazon RDS 프로시저 rdsadmin.rdsadmin_s3_tasks.upload_to_s3를 사용하여 덤프 파일을 Amazon S3 버킷에 업로드합니다. 다음 예제에서는 DATA_PUMP_DIR 디렉터리에서 모든 파일을 myS3bucket이라는 이름의 Amazon S3 버킷에 업로드합니다.

SELECT rdsadmin.rdsadmin_s3_tasks.upload_to_s3( p_bucket_name => 'myS3bucket', p_directory_name => 'DATA_PUMP_DIR') AS TASK_ID FROM DUAL;

SELECT 문은 VARCHAR2 데이터 형식으로 작업 ID를 반환합니다. 자세한 내용은 RDS for Oracle DB 인스턴스에서 Amazon S3 버킷으로 파일 업로드을 참조하세요.

4단계: Amazon S3 버킷에서 대상 DB 인스턴스로 덤프 파일 다운로드

Amazon RDS rdsadmin.rdsadmin_s3_tasks.download_from_s3 프로시저를 사용하여 단계를 수행합니다. 디렉터리에 파일을 다운로드할 때 동일한 이름의 파일이 디렉터리에 이미 있는 경우, 이 download_from_s3 프로시저는 다운로드를 건너뜁니다. 다운로드 디렉터리에서 파일을 제거하려면 Oracle 웹사이트에 있는 UTL_FILE.FREMOVE를 사용하세요.

덤프 파일을 다운로드하는 방법
  1. SQL*Plus 또는 Oracle SQL Developer를 시작하여 Amazon RDS 대상 Oracle DB 인스턴스에서 마스터로 로그인합니다.

  2. Amazon RDS rdsadmin.rdsadmin_s3_tasks.download_from_s3 프로시저를 사용하여 덤프 파일을 다운로드합니다.

    다음 예에서는 myS3bucket이라는 이름의 Amazon S3 버킷에서 모든 파일을 DATA_PUMP_DIR 디렉터리로 다운로드합니다.

    SELECT rdsadmin.rdsadmin_s3_tasks.download_from_s3( p_bucket_name => 'myS3bucket', p_directory_name => 'DATA_PUMP_DIR') AS TASK_ID FROM DUAL;

    SELECT 문은 VARCHAR2 데이터 형식으로 작업 ID를 반환합니다. 자세한 내용은 Amazon S3 버킷의 파일을 Oracle DB 인스턴스로 다운로드을 참조하세요.

5단계: DBMS_DATAPUMP를 사용하여 덤프 파일을 대상 DB 인스턴스로 가져오기

DBMS_DATAPUMP를 사용하여 스키마를 RDS for Oracle DB 인스턴스로 가져옵니다. METADATA_REMAP과 같은 추가 옵션이 필요할 수 있습니다.

대상 DB 인스턴스로 데이터를 가져오는 방법
  1. SQL*Plus 또는 SQL Developer를 시작하여 마스터 사용자로 RDS for Oracle DB 인스턴스에 로그인합니다.

  2. DBMS_DATAPUMP 프로시저를 직접 호출하여 데이터를 가져옵니다.

    다음 예에서는 sample_copied.dmp에서 대상 DB 인스턴스로 SCHEMA_1 데이터를 가져옵니다.

    DECLARE v_hdnl NUMBER; BEGIN v_hdnl := DBMS_DATAPUMP.OPEN( operation => 'IMPORT', job_mode => 'SCHEMA', job_name => null); DBMS_DATAPUMP.ADD_FILE( handle => v_hdnl, filename => 'sample_copied.dmp', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_dump_file); DBMS_DATAPUMP.ADD_FILE( handle => v_hdnl, filename => 'sample_imp.log', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_log_file); DBMS_DATAPUMP.METADATA_FILTER(v_hdnl,'SCHEMA_EXPR','IN (''SCHEMA_1'')'); DBMS_DATAPUMP.START_JOB(v_hdnl); END; /
    참고

    Data Pump 작업은 비동기로 시작됩니다. Data Pump 작업 모니터링에 대한 자세한 정보는 Oracle 설명서의 Monitoring Job Status를 참조하십시오. rdsadmin.rds_file_util.read_text_file 절차를 사용하여 가져오기 로그의 내용을 볼 수 있습니다. 자세한 내용은 DB 인스턴스 디렉터리의 파일 목록 읽기을 참조하세요.

  3. 대상 DB 인스턴스의 스키마 테이블을 나열하여 데이터 가져오기 작업을 확인합니다.

    예를 들어 다음 쿼리는 SCHEMA_1의 테이블 수를 반환합니다.

    SELECT COUNT(*) FROM DBA_TABLES WHERE OWNER='SCHEMA_1';

6단계: 정리

데이터를 가져온 후에는 유지하지 않을 파일을 삭제할 수 있습니다.

불필요한 파일을 제거하는 방법
  1. SQL*Plus 또는 SQL Developer를 시작하여 마스터 사용자로 RDS for Oracle DB 인스턴스에 로그인합니다.

  2. 다음 명령을 사용하여 DATA_PUMP_DIR의 파일을 나열합니다.

    SELECT * FROM TABLE(rdsadmin.rds_file_util.listdir('DATA_PUMP_DIR')) ORDER BY MTIME;
  3. 다음 명령을 사용하여 DATA_PUMP_DIR에서 더 이상 필요하지 않은 파일을 삭제합니다.

    EXEC UTL_FILE.FREMOVE('DATA_PUMP_DIR','filename');

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

    EXEC UTL_FILE.FREMOVE('DATA_PUMP_DIR','sample_copied.dmp');

다음 가져오기 프로세스에서는 Oracle Data Pump 및 Oracle DBMS_FILE_TRANSFER 패키지를 사용합니다. 단계는 다음과 같습니다.

  1. 소스 Oracle 데이터베이스(온프레미스 데이터베이스, Amazon EC2 인스턴스 또는 RDS for Oracle DB 인스턴스 등)에 연결합니다.

  2. DBMS_DATAPUMP 패키지를 사용하여 데이터를 내보냅니다.

  3. DBMS_FILE_TRANSFER.PUT_FILE을 사용하여 데이터베이스 링크를 통해 연결된 대상 RDS for Oracle DB 인스턴스의 DATA_PUMP_DIR 디렉터리에 Oracle 데이터베이스의 덤프 파일을 복사합니다.

  4. DBMS_DATAPUMP 패키지를 사용하여 복사된 덤프 파일의 데이터를 RDS for Oracle DB 인스턴스로 가져옵니다.

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

Oracle Data Pump와 데이터베이스 링크로 데이터를 가져오기 위한 요건

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

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

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

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

참고

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

1단계: RDS for Oracle 대상 DB 인스턴스 사용자에게 권한 부여

RDS for Oracle 대상 DB 인스턴스에서 사용자에게 권한을 부여하려면 다음 단계를 수행합니다.

  1. SQL Plus 또는 Oracle SQL Developer를 사용하여 데이터를 가져올 RDS for Oracle DB 인스턴스에 연결합니다. Amazon RDS 마스터 사용자 권한으로 연결합니다. DB 인스턴스 연결에 대한 자세한 정보는 RDS for Oracle DB 인스턴스에 연결 단원을 참조하십시오.

  2. 데이터를 가져오려면 먼저 테이블 스페이스를 생성해야 합니다. 자세한 내용은 테이블스페이스 생성과 크기 조정 섹션을 참조하세요.

  3. 데이터를 가져올 사용자 계정이 존재하지 않으면 사용자 계정을 생성한 후 필요한 권한과 역할을 부여합니다. 데이터를 다수의 사용자 스키마로 가져오려는 경우에는 사용자 계정을 각각 생성한 후에 필요한 권한과 역할을 부여합니다.

    예를 들어 다음 명령은 schema_1이라는 신규 사용자를 생성하고, 해당 사용자의 스키마로 데이터를 가져오는 데 필요한 권한과 역할을 부여합니다.

    CREATE USER schema_1 IDENTIFIED BY my-password; GRANT CREATE SESSION, RESOURCE TO schema_1; ALTER USER schema_1 QUOTA 100M ON users;
    참고

    보안 모범 사례로 여기에 표시된 프롬프트 이외의 암호를 지정하는 것이 좋습니다.

    앞선 예에서는 새로운 사용자에게 CREATE SESSION 권한과 RESOURCE 역할을 부여합니다. 하지만 가져오는 데이터베이스 객체에 따라 권한과 역할이 추가로 필요할 수도 있습니다.

    참고

    다음 단계에서 schema_1을 이 단계의 스키마 이름으로 대체합니다.

2단계: 소스 데이터베이스에서 사용자에게 권한 부여

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

참고

원본 데이터베이스가 Amazon RDS 인스턴스인 경우 이 단계를 건너뛸 수 있습니다. 이 경우 Amazon RDS 마스터 사용자 계정을 사용하여 데이터를 내보냅니다.

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

CREATE USER export_user IDENTIFIED BY my-password; GRANT CREATE SESSION, CREATE TABLE, CREATE DATABASE LINK TO export_user; ALTER USER export_user QUOTA 100M ON users; GRANT READ, WRITE ON DIRECTORY data_pump_dir TO export_user; GRANT SELECT_CATALOG_ROLE TO export_user; GRANT EXECUTE ON DBMS_DATAPUMP TO export_user; GRANT EXECUTE ON DBMS_FILE_TRANSFER TO export_user;
참고

보안 모범 사례로 여기에 표시된 프롬프트 이외의 암호를 지정하는 것이 좋습니다.

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

덤프 파일을 만들려면 다음을 수행합니다.

  1. SQL*Plus 또는 Oracle SQL Developer를 통해 관리 사용자 권한으로, 또는 2단계에서 생성한 사용자 권한으로 소스 Oracle 인스턴스에 연결합니다. 소스 데이터베이스가 Amazon RDS for Oracle DB 인스턴스인 경우 Amazon RDS 마스터 사용자 권한으로 연결합니다.

  2. Oracle Data Pump 유틸리티를 사용하여 덤프 파일을 생성합니다.

    다음 스크립트는 DATA_PUMP_DIR 디렉터리에 sample.dmp라는 덤프 파일을 생성합니다.

    DECLARE v_hdnl NUMBER; BEGIN v_hdnl := DBMS_DATAPUMP.OPEN( operation => 'EXPORT' , job_mode => 'SCHEMA' , job_name => null ); DBMS_DATAPUMP.ADD_FILE( handle => v_hdnl, filename => 'sample.dmp' , directory => 'DATA_PUMP_DIR' , filetype => dbms_datapump.ku$_file_type_dump_file ); DBMS_DATAPUMP.ADD_FILE( handle => v_hdnl , filename => 'sample_exp.log' , directory => 'DATA_PUMP_DIR' , filetype => dbms_datapump.ku$_file_type_log_file ); DBMS_DATAPUMP.METADATA_FILTER( v_hdnl , 'SCHEMA_EXPR' , 'IN (''SCHEMA_1'')' ); DBMS_DATAPUMP.METADATA_FILTER( v_hdnl, 'EXCLUDE_NAME_EXPR', q'[IN (SELECT NAME FROM sys.OBJ$ WHERE TYPE# IN (66,67,74,79,59,62,46) AND OWNER# IN (SELECT USER# FROM SYS.USER$ WHERE NAME IN ('RDSADMIN','SYS','SYSTEM','RDS_DATAGUARD','RDSSEC') ) ) ]', 'PROCOBJ' ); DBMS_DATAPUMP.START_JOB(v_hdnl); END; /
    참고

    Data Pump 작업은 비동기로 시작됩니다. Data Pump 작업 모니터링에 대한 자세한 정보는 Oracle 설명서의 Monitoring Job Status를 참조하십시오. rdsadmin.rds_file_util.read_text_file 절차를 사용하여 내보내기 로그의 내용을 볼 수 있습니다. 자세한 내용은 DB 인스턴스 디렉터리의 파일 목록 읽기 섹션을 참조하세요.

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

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

이번 단계에서도 이전 단계와 동일한 사용자 계정에 연결합니다.

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

다음 명령은 대상 DB 인스턴스의 Amazon RDS 마스터 사용자에게 연결하는 to_rds라는 데이터베이스 링크를 생성합니다.

CREATE DATABASE LINK to_rds CONNECT TO <master_user_account> IDENTIFIED BY <password> USING '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=<dns or ip address of remote db>) (PORT=<listener port>))(CONNECT_DATA=(SID=<remote SID>)))';

5단계: DBMS_FILE_TRANSFER를 사용하여 내보낸 덤프 파일을 대상 DB 인스턴스로 복사

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

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

6단계: DBMS_DATAPUMP를 사용하여 대상 DB 인스턴스로 데이터 파일 가져오기

DB 인스턴스에서 Oracle Data Pump를 사용하여 스키마를 가져옵니다. METADATA_REMAP 등 추가 옵션이 필요할 수 있습니다.

Amazon RDS 마스터 사용자 계정으로 DB 인스턴스에 연결하여 데이터를 가져옵니다.

DECLARE v_hdnl NUMBER; BEGIN v_hdnl := DBMS_DATAPUMP.OPEN( operation => 'IMPORT', job_mode => 'SCHEMA', job_name => null); DBMS_DATAPUMP.ADD_FILE( handle => v_hdnl, filename => 'sample_copied.dmp', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_dump_file ); DBMS_DATAPUMP.ADD_FILE( handle => v_hdnl, filename => 'sample_imp.log', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_log_file); DBMS_DATAPUMP.METADATA_FILTER(v_hdnl,'SCHEMA_EXPR','IN (''SCHEMA_1'')'); DBMS_DATAPUMP.START_JOB(v_hdnl); END; /
참고

Data Pump 작업은 비동기로 시작됩니다. Data Pump 작업 모니터링에 대한 자세한 정보는 Oracle 설명서의 Monitoring Job Status를 참조하십시오. rdsadmin.rds_file_util.read_text_file 절차를 사용하여 가져오기 로그의 내용을 볼 수 있습니다. 자세한 내용은 DB 인스턴스 디렉터리의 파일 목록 읽기 섹션을 참조하세요.

DB 인스턴스에서 해당 사용자의 테이블을 보고 데이터 가져오기를 확인할 수 있습니다. 예를 들어 다음 쿼리는 schema_1의 테이블 수를 반환합니다.

SELECT COUNT(*) FROM DBA_TABLES WHERE OWNER='SCHEMA_1';

7단계: 정리

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

SELECT * FROM TABLE(rdsadmin.rds_file_util.listdir('DATA_PUMP_DIR')) ORDER BY MTIME;

DATA_PUMP_DIR에서 더 이상 필요하지 않은 파일을 삭제하려면 다음 명령을 사용합니다.

EXEC UTL_FILE.FREMOVE('DATA_PUMP_DIR','<file name>');

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

EXEC UTL_FILE.FREMOVE('DATA_PUMP_DIR','sample_copied.dmp');