Oracle Instant Client를 사용하여 Amazon RDS for Oracle DB 인스턴스에서 Data Pump 가져오기 또는 내보내기를 실행하려면 어떻게 해야 하나요?

8분 분량
0

impdp 및 expdp 유틸리티를 사용하여 Amazon Relational Database Service(RDS) for Oracle DB 인스턴스로 내보내기 및 가져오기를 수행하려고 합니다.

간략한 설명

Amazon RDS for Oracle DB 인스턴스로 내보내기 또는 가져오기를 수행하는 여러 방법이 있습니다.

환경을 설정한 후 다음을 수행할 수 있습니다.

  • 소스 Oracle RDS 인스턴스에서 대상 Oracle RDS 인스턴스로 테이블을 가져옵니다.
  • Oracle RDS 인스턴스에서 데이터를 내보내고 Amazon Elastic Compute Cloud(EC2) 인스턴스 또는 원격 호스트에서 로컬로 덤프 파일을 생성합니다.
  • Oracle RDS 인스턴스에서 데이터를 내보내고 RDS 호스트에 덤프 파일을 저장합니다.
  • RDS 호스트에 있는 덤프 파일을 가져옵니다.
  • S3 통합 옵션을 사용하여 RDS for Oracle DB 인스턴스와 Amazon Simple Storage Service(S3) 버킷 사이에서 덤프 파일을 전송합니다.

해결 방법

관리형 서비스 환경을 제공하려는 경우 RDS 호스트에서 impdp 및 expdp 유틸리티를 사용하기 위해 호스트 수준 액세스는 허용되지 않습니다. 또 다른 옵션으로, 데이터 펌프 API(DBMS_DATAPUMP)를 사용하여 가져오기 또는 내보내기를 수행할 수 있습니다. 하지만 원격 호스트에서 데이터 펌프 유틸리티를 사용해 이 작업을 수행할 수 있습니다.

Oracle Instant Client는 사용자 컴퓨터 또는 Amazon EC2 인스턴스에 설치할 수 있는 경량 클라이언트입니다. Oracle Instant Client에는 명령줄에서 내보내기 및 가져오기를 수행하는 데 사용할 수 있는 impdp 및 expdp 유틸리티가 포함되어 있습니다.

사전 조건

Oracle Instant Client를 사용하기 전에 다음을 수행합니다.

  • 문서 ID 553337.1을 검토하여 다운로드 중인 바이너리가 소스 및 대상 버전과 호환되는지 확인합니다. 보통 동일한 버전 또는 그 이상 버전의 클라이언트에서 내보내기 작업은 지원됩니다. 대상 Amazon RDS 메이저 버전과 동일한 클라이언트 버전을 사용하는 가져오기도 지원됩니다. 예를 들어, 소스 인스턴스의 버전이 12.2이고 대상 인스턴스의 버전이 19c인 경우 최신 19c 버전의 Oracle Instant 클라이언트를 설치할 수 있습니다.
  • Data Pump를 사용하려면 기본 패키지 위에 도구 패키지를 설치하세요. 패키지를 설치하려면 Oracle Instant Client 설명서를 참조하세요.
  • 대상 RDS 인스턴스의 일광 절약 시간(DST) 버전이 소스 인스턴스의 버전과 동일하거나 그 이상인지 확인합니다. 그렇지 않으면 가져오기를 실행하는 동안 ORA-39405 오류가 발생합니다. 다음 쿼리를 사용하여 인스턴스의 현재 DST 버전을 확인합니다. DST 버전을 Oracle RDS 인스턴스에서 사용 가능한 최신 버전으로 업데이트하려면 TIMEZONE_FILE_AUTOUPGRADE 옵션을 사용합니다.
SELECT * FROM V$TIMEZONE_FILE;

Oracle Instant Client를 사용하여 데이터베이스 링크를 통해 Data Pump 가져오기 또는 내보내기를 테스트하려면 다음을 수행합니다.

1.    Amazon Linux 2 운영 체제를 사용하여 Amazon EC2 인스턴스 테스트를 생성합니다.

2.    기본(RPM) 패키지, 도구(RPM) 패키지, SQL*Plus(RPM) 패키지를 다운로드합니다. 이 문서에서 다운로드할 수 있는 최신 RPM은 다음과 같습니다.

  • oracle-instantclient19.16-basic-19.16.0.0.0-1.x86_64.rpm
  • oracle-instantclient19.16-tools-19.16.0.0.0-1.x86_64.rpm
  • oracle-instantclient19.16-sqlplus-19.16.0.0.0-1.x86_64.rpm

3.    바이너리를 EC2 인스턴스로 전송합니다. 자세한 내용은 SCP 클라이언트를 사용하여 Linux 인스턴스로 파일 전송을 참조하세요.

4.    Oracle 설명서에서 RPM을 사용하여 Oracle Instant Client 설치에 대한 지침을 따릅니다. 이 프로세스는 기본 위치 /usr/lib/oracle/example-client-version/client64에 바이너리를 설치합니다. 예를 들어, 버전 19.16용 바이너리를 다운로드하는 경우 해당 설치의 기본 바이너리 위치는 /usr/lib/oracle/19.16/client64/bin입니다.

5.    SQL*Plus(RPM) 패키지를 설치합니다. SQL*Plus는 EC2 인스턴스와 RDS 인스턴스 간 연결을 테스트하는 데 사용됩니다.

예제:

sudo yum install oracle-instantclient19.16-sqlplus-19.16.0.0.0-1.x86_64.rpm

6.    이 예제와 같이 다음 환경 변수를 설정하거나 업데이트합니다.

export PATH=$PATH:/usr/lib/oracle/19.16/client64/bin
export LD_LIBRARY_PATH=/usr/lib/oracle/19.16/client64/lib

7.    /usr/lib/oracle/ example-client-version/client64/lib/network/admin 위치에서 구성 파일(예: tnsnames.orasqlnet.ora)을 생성합니다. 이 예제에서 위치는 /usr/lib/oracle/19.16/client64/lib/network/admin입니다.

환경 설정

1.    Data Pump 가져오기 또는 내보내기에 필요한 TNS 항목을 tnsnames.ora 파일에 추가합니다.

tnsnames.ora 파일에서 항목 예제:

target = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP) 
   (HOST = xxxx.rxrxrmwt1x471wi.eu-central-1.rds.amazonaws.com) (PORT = 1521)))(CONNECT_DATA = (SID = orcl)))

자세한 내용은 Oracle DB 인스턴스에 SSL을 사용하도록 SQL*Plus 구성을 참조하세요.

  1. EC2 인스턴스로부터의 연결을 허용하도록 소스 및 대상 RDS 인스턴스의 보안 그룹에 대한 인바운드 규칙을 업데이트합니다.

  2. 다음과 유사한 쿼리를 실행하여 소스 RDS 인스턴스에 테스트 테이블을 생성하여 내보내기를 수행합니다.

CREATE TABLE TEST1 AS SELECT * FROM DBA_TABLES;
CREATE TABLE TEST2 AS SELECT * FROM DBA_OBJECTS;
CREATE TABLE TEST3 AS SELECT * FROM DBA_DATA_FILES;

소스 Oracle RDS 인스턴스에서 대상 Oracle RDS 인스턴스로 테이블 가져오기

소스 Oracle RDS 인스턴스에서 대상 Oracle RDS 인스턴스로 테이블을 가져오려면 다음을 수행합니다.

1.    아래 예제와 비슷한 쿼리를 실행하여 소스 데이터베이스와 대상 데이터베이스 사이에서 데이터베이스 링크를 생성합니다. 이 링크는 network_link 파라미터에서 사용됩니다.

CREATE DATABASE LINK sample_conn CONNECT TO example-username IDENTIFIED BY example-password USING '(DESCRIPTION = (ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = example-hostname)(PORT = example-port)))(CONNECT_DATA =(SERVICE_NAME = example-service-name)))';

대상 인스턴스를 소스 인스턴스에 연결하는 데이터베이스 링크에는 대상 인스턴스의 연결을 허용하는 인바운드 규칙이 있습니다.

2.    impdp 명령을 실행하기 전에 이 문서에서 간략히 설명한 사전 조건과 설정을 완료합니다.

3.    Oracle Instant Client가 포함된 EC2 인스턴스에 로그인합니다.

4.    소스 인스턴스에서 대상 인스턴스로 데이터를 가져오려면 다음과 유사한 명령을 실행합니다.

impdp admin@target directory=data_pump_dir logfile=imp_test_tables_using_nw_link.log tables=admin.test1,admin.test2,admin.test3 network_link=sample_conn

출력 예제:

Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Starting "ADMIN"."SYS_IMPORT_TABLE_01":  admin/********@target directory=data_pump_dir logfile=imp_test_tables_using_nw_link.log tables=admin.test1,admin.test2,admin.test3 network_link=sample_conn
Estimate in progress using BLOCKS method...
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 3.625 MB
Processing object type TABLE_EXPORT/TABLE/TABLE
. . imported "ADMIN"."TEST2"                              20634 rows
. . imported "ADMIN"."TEST1"                               1537 rows
. . imported "ADMIN"."TEST3"                                  6 rows
Processing object type TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Processing object type TABLE_EXPORT/TABLE/STATISTICS/MARKER
Job "ADMIN"."SYS_IMPORT_TABLE_01" successfully completed at Wed Oct 14 23:57:28 2020 elapsed 0 00:01:06

Oracle RDS 인스턴스에서 데이터 내보내기 및 원격 호스트에서 로컬로 덤프 파일 생성

Oracle RDS 인스턴스에서 데이터를 내보내고 로컬에서 덤프 파일을 생성하려면 다음을 수행합니다.

  • EC2 인스턴스 또는 원격 호스트에 Oracle 데이터베이스를 설치합니다. 다음 예제에서 Oracle XE는 Windows EC2 인스턴스에 설치되어 있습니다. Oracle XE에 대한 자세한 내용은 Oracle Database XE Quick Start(Oracle 데이터베이스 XE 빠른 시작)를 참조하세요.
  • EC2 인스턴스로부터의 연결을 허용하도록 소스 RDS 인스턴스의 보안 그룹에 대한 인바운드 규칙을 업데이트합니다.

1.    SQL*Plus와 같은 Oracle 클라이언트를 사용하여 XE 데이터베이스에 로그인합니다. 그런 다음, Oracle XE 데이터베이스에서 디렉터리를 생성합니다. 이 디렉터리는 EC2 인스턴스에서 덤프 파일을 생성하려는 디렉터리를 참조합니다. 다음과 유사한 쿼리를 실행합니다.

create directory exp_dir as 'C:\TEMP\';

2.    XE 데이터베이스에서 다음 예제와 비슷한 명령을 사용하여 소스 RDS 데이터베이스에 대한 데이터베이스 링크를 생성합니다.

CREATE DATABASE LINK exp_rds CONNECT TO admin identified by example_password USING '(DESCRIPTION = (ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = example-hostname)(PORT=example-port)))(CONNECT_DATA =(SERVICE_NAME = example-service-name)))';

3.    다음과 유사한 데이터베이스 링크를 테스트합니다.

select sysdate from dual@exp_rds;

4.    EC2 인스턴스에서 덤프 파일을 생성하려면 다음과 비슷한 명령을 실행합니다.

expdp system network_link=exp_rds directory=exp_dir dumpfile=table_dump.dmp logfile=expdp_table_dump.log tables=admin.test1,admin.test2,admin.test3

출력 예제:

Connected to: Oracle Database 21c Express Edition Release 21.0.0.0.0 - Production Warning: Oracle Data Pump operations are not typically needed when connected to the root or seed of a container database. Starting "SYSTEM"."SYS_EXPORT_TABLE_01": system/********
    network_link=exp_rds directory=exp_dir dumpfile=table_dump.dmp logfile=expdp_table_dump.log tables=admin.test1,admin.test2,admin.test3 Processing object type TABLE_EXPORT/TABLE/TABLE_DATA Processing object type TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
    Processing object type TABLE_EXPORT/TABLE/STATISTICS/MARKER
Processing object type TABLE_EXPORT/TABLE/TABLE . . exported "ADMIN"."TEST2" 2.713 MB  23814 rows. . exported "ADMIN"."TEST1"  677.1 KB  1814 rows. . exported "ADMIN"."TEST3"  15.98 KB  5 rows Master table "SYSTEM"."SYS_EXPORT_TABLE_01"
    successfully loaded/unloaded ****************************************************************************** Dump file set for SYSTEM.SYS_EXPORT_TABLE_01 is:   C:\TEMP\TABLE_DUMP.DMP
Job "SYSTEM"."SYS_EXPORT_TABLE_01" successfully completed at Wed Aug 24 18:15:25 2022 elapsed 0 00:00:18

Oracle RDS 인스턴스에서 데이터 내보내기 및 RDS 호스트에 덤프 파일 저장

Oracle RDS 인스턴스에서 데이터를 내보내고 RDS 호스트에 덤프 파일을 저장하려면 다음을 수행합니다.

1.    expdp 명령을 실행하기 전에 이 문서에서 간략히 설명한 사전 조건과 설정을 완료합니다.

2.    Oracle Instant Client가 포함된 EC2 인스턴스에 로그인합니다.

3.    다음과 비슷한 명령을 실행하여 RDS 인스턴스에서 덤프 파일을 생성합니다.

expdp admin@target dumpfile=table_dump.dmp logfile=expdp_table_dump.log tables=admin.test1,admin.test2,admin.test3

출력 예제:

Export: Release 19.0.0.0.0 - Production on Wed Aug 24 16:18:58 2022
Version 19.16.0.0.0
Copyright (c) 1982, 2022, Oracle and/or its affiliates.  All rights reserved.
Password:
Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Starting "ADMIN"."SYS_EXPORT_TABLE_01":  admin/********@target dumpfile=table_dump.dmp logfile=expdp_table_dump.log tables=admin.test1,admin.test2,admin.test3
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
Processing object type TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Processing object type TABLE_EXPORT/TABLE/STATISTICS/MARKER
Processing object type TABLE_EXPORT/TABLE/TABLE
. . exported "ADMIN"."TEST2"                             2.713 MB   23814 rows
. . exported "ADMIN"."TEST1"                             677.1 KB    1814 rows
. . exported "ADMIN"."TEST3"                             15.98 KB       5 rows
Master table "ADMIN"."SYS_EXPORT_TABLE_01" successfully loaded/unloaded
******************************************************************************
Dump file set for ADMIN.SYS_EXPORT_TABLE_01 is:
  /rdsdbdata/datapump/table_dump.dmp
Job "ADMIN"."SYS_EXPORT_TABLE_01" successfully completed at Wed Aug 24 16:19:20 2022 elapsed 0 00:00:15

RDS 호스트에 있는 덤프 파일 가져오기

RDS 호스트에 저장된 덤프 파일을 가져오려면 다음을 수행합니다.

참고: 이 예제에서 데이터는 RDS 호스트의 DATA_PUMP_DIR에 있습니다.

1.    impdp 명령을 실행하기 전에 이 문서에서 간략히 설명한 사전 조건과 설정을 완료합니다.

2.    Instant Client가 포함된 EC2 인스턴스에 로그인합니다.

3.    EC2 인스턴스에서 다음과 비슷한 명령을 실행하여 RDS 호스트에 있는 덤프 파일을 가져옵니다.

참고: 이 예제에서는 데이터를 가져오기 전에 테이블이 잘립니다.

impdp admin@target directory=DATA_PUMP_DIR dumpfile=table_dump.dmp logfile=impdp_table_dump.log tables=admin.test1,admin.test2,admin.test3 table_exists_action=truncate

출력 예제:

import: Release 19.0.0.0.0 - Production on Thu Sep 8 13:24:44 2022
Version 19.16.0.0.0
Copyright (c) 1982, 2022, Oracle and/or its affiliates.  All rights reserved.
Password:
Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Master table "ADMIN"."SYS_IMPORT_TABLE_01" successfully loaded/unloaded
Starting "ADMIN"."SYS_IMPORT_TABLE_01":  admin/********@target directory=DATA_PUMP_DIR dumpfile=table_dump.dmp logfile=impdp_table_dump.log tables=admin.test1,admin.test2,admin.test3 table_exists_action=truncate
Processing object type TABLE_EXPORT/TABLE/TABLE
Table "ADMIN"."TEST2" exists and has been truncated. Data will be loaded but all dependent metadata will be skipped due to table_exists_action of truncate
Table "ADMIN"."TEST3" exists and has been truncated. Data will be loaded but all dependent metadata will be skipped due to table_exists_action of truncate
Table "ADMIN"."TEST1" exists and has been truncated. Data will be loaded but all dependent metadata will be skipped due to table_exists_action of truncate
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
. . imported "ADMIN"."TEST2"                             2.749 MB   24059 rows
. . imported "ADMIN"."TEST1"                             677.2 KB    1814 rows
. . imported "ADMIN"."TEST3"                             15.98 KB       5 rows
Processing object type TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Processing object type TABLE_EXPORT/TABLE/STATISTICS/MARKER
Job "ADMIN"."SYS_IMPORT_TABLE_01" successfully completed at Thu Sep 8 13:24:54 2022 elapsed 0 00:00:06

RDS for Oracle DB 인스턴스 및 Amazon S3 버킷 사이에서 덤프 파일 전송

RDS Oracle DB 인스턴스와 Amazon S3 버킷 사이에서 덤프 파일을 전송하려는 경우 S3 통합 옵션을 사용할 수 있습니다. 자세한 내용은 Amazon RDS for Oracle과 Amazon S3 버킷 사이의 파일 전송을 참조하세요.


관련 정보

Overview of Oracle Data Pump(Oracle Data Pump 개요)

DBMS_DATAPUMP