Computer >> 컴퓨터 >  >> 프로그래밍 >> 데이터베이스

Oracle Database 12c 데이터 펌프 완벽 가이드(2부): PDB 익스포트 방법과 주요 제한 사항

이 글은 TriCore에서 2017년 6월 6일에 처음 게시된 콘텐츠를 기반으로 재구성했습니다.

Oracle® Data Pump(expdp, impdp)는 데이터베이스 객체를 하나의 데이터베이스 내부 또는 여러 데이터베이스 간에 내보내고(익스포트) 가져오는(임포트) 유틸리티입니다. 이 두 부분으로 구성된 블로그 시리즈의 1부에서는 Oracle Database 12c에 도입된 멀티테넌트(Multitenant) 아키텍처의 개요와 Data Pump를 활용한 데이터 내보내기·가져오기 방법을 다루었습니다. 2부인 이번 글에서는 플러그형 데이터베이스(PDB)만을 대상으로 익스포트를 수행하는 방법과, Data Pump가 PDB에 적용하는 제한 사항을 자세히 살펴봅니다.

PDB 익스포트 수행하기

컨테이너 데이터베이스(CDB) 환경에서 실제 데이터는 하위 PDB에 속하며, 클라이언트 입장에서 각 PDB는 비CDB(일반적인 Oracle 데이터베이스)처럼 동작합니다. 따라서 PDB에 포함된 객체를 대상으로 익스포트를 수행하는 것이 자연스러운 접근 방식입니다.

Oracle Database 12c 데이터 펌프 완벽 가이드(2부): PDB 익스포트 방법과 주요 제한 사항

이미지 출처: Data Pump 아키텍처

PDB에 대한 Data Pump 익스포트 사용법은 비CDB 데이터베이스와 동일합니다. 유일한 차이점은 익스포트를 시작할 때 명령 프롬프트에서 접속 식별자(connect identifier) 또는 TNS(Transparent Network Substrate) 별칭을 반드시 지정해야 한다는 점입니다. 이 과정을 통해 특정 PDB를 대상으로 Data Pump 익스포트가 실행되도록 보장할 수 있습니다.

예를 들어, 다음 명령을 사용하면 PDB PRODPDB1에 속한 사용자 ABBAS의 스키마를 익스포트할 수 있습니다.

[oracle@labserver ~]$ expdp directory=DP_PDB1 dumpfile=pdb1_abbas.dmp logfile=pdb1_abbas.log schemas=abbas

위 명령의 실행 결과는 다음과 같습니다.

Export: Release 12.1.0.1.0 - Production on Fri Mar 27 00:08:09 2015

Copyright (c) 1982, 2013, Oracle and/or its affiliates.  All rights reserved.

Username: sys@prodpdb1 as sysdba
Password:

Connected to: Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Partitioning, Automatic Storage Management, OLAP, Advanced Analytics
and Real Application Testing options
Starting "SYS"."SYS_EXPORT_SCHEMA_01":  sys/********@prodpdb1 AS SYSDBA directory=DP_PDB1 dumpfile=pdb1_abbas.dmp logfile=pdb1_abbas.log schemas=abbas
Estimate in progress using BLOCKS method...
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 64 KB
Processing object type SCHEMA_EXPORT/USER
Processing object type SCHEMA_EXPORT/SYSTEM_GRANT
Processing object type SCHEMA_EXPORT/ROLE_GRANT
Processing object type SCHEMA_EXPORT/DEFAULT_ROLE
Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Processing object type SCHEMA_EXPORT/STATISTICS/MARKER
. . exported "ABBAS"."TAB1"                          67.85 KB      41 rows
Master table "SYS"."SYS_EXPORT_SCHEMA_01" successfully loaded/unloaded
******************************************************************************
Dump file set for SYS.SYS_EXPORT_SCHEMA_01 is:
  /backup/exp/prodpdb1/pdb1_abbas.dmp
Job "SYS"."SYS_EXPORT_SCHEMA_01" successfully completed at Thu Mar 26 14:39:44 2015 elapsed 0 00:01:08

여기서 주목할 점은 사용자 이름을 입력할 때 PDB PRODPDB1에 대한 접속 식별자도 함께 지정했다는 것입니다.

[oracle@labserver ~]$ expdp directory=DP_PDB1 dumpfile=pdb1_abbas.dmp logfile=pdb1_abbas.log schemas=abbas

Export: Release 12.1.0.1.0 - Production on Fri Mar 27 00:08:09 2015

Copyright (c) 1982, 2013, Oracle and/or its affiliates.  All rights reserved.

Username: sys@prodpdb1 as sysdba
Password:

다음 출력 결과는 접속 식별자(prodpdb1)가 PDB PRODPDB1로 올바르게 해석되고 있음을 보여줍니다.

[oracle@labserver ~]$ tnsping prodpdb1

TNS Ping Utility for Linux: Version 12.1.0.1.0 - Production on 27-MAR-2015 00:11:54

Copyright (c) 1997, 2013, Oracle.  All rights reserved.

Used parameter files:
/app/oracle/db/12.1.0.1/network/admin/sqlnet.ora

Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = labserver.home.com)(PORT = 1525)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = prodpdb1)))
OK (10 msec)

PDB에 대한 Data Pump 제한 사항

주의해야 할 중요한 제약 조건이 있습니다. Data Pump에서는 임포트·익스포트 작업에 루트 컨테이너(CDB)가 소유한 디렉터리를 사용할 수 없으며, 다른 PDB가 소유한 디렉터리 역시 사용할 수 없습니다.

따라서 해당 PDB 내부에 직접 디렉터리를 생성해야 합니다. Data Pump의 익스포트·임포트 기능을 사용하려면 반드시 그 PDB가 해당 디렉터리를 소유하고 있어야 합니다.

다른 PDB나 루트 컨테이너에 속한 디렉터리를 사용하려고 하면 다음과 같은 오류가 반환됩니다.

[oracle@labserver ~]$ expdp directory=DP_PDB2 dumpfile=pdb1_abbas.dmp logfile=pdb1_abbas.log schemas=abbas

Export: Release 12.1.0.1.0 - Production on Fri Mar 27 00:21:08 2015

Copyright (c) 1982, 2013, Oracle and/or its affiliates.  All rights reserved.

Username: sys@prodpdb1 as sysdba
Password:

Connected to: Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Partitioning, Automatic Storage Management, OLAP, Advanced Analytics
and Real Application Testing options
ORA-39002: invalid operation
ORA-39070: Unable to open the log file.
ORA-39087: directory name DP_PDB2 is invalid

또한 기본 디렉터리인 DATA_PUMP_DIR을 사용해 PDB를 익스포트하거나 임포트할 수도 없습니다. 그 이유는 DATA_PUMP_DIR이 항상 루트 컨테이너에 의해 소유되며, 그 소유권을 변경할 수 없기 때문입니다.

PDB 내부에서 기본 DATA_PUMP_DIR을 생성하려고 시도하면 다음과 같은 오류가 발생합니다.

sys@PRODPDB1> show con_name

CON_NAME
------------------------------
PRODPDB1
sys@PRODPDB1> create or replace directory DATA_PUMP_DIR as '/backup/exp/prodpdb1';
create or replace directory DATA_PUMP_DIR as '/backup/exp/prodpdb1'
*
ERROR at line 1:
ORA-65040: operation not allowed from within a pluggable database

결론적으로, Data Pump 익스포트 또는 임포트 작업을 수행하려면 반드시 해당 PDB 안에서 명시적으로 디렉터리를 생성해야 합니다.

결론

Data Pump 유틸리티는 Oracle이 Oracle 10g부터 제공하기 시작한 강화된 익스포트·임포트 도구입니다. 이 시리즈 1부와 2부에서 다룬 Oracle Database 12c의 expdp 개선 사항을 제대로 활용하면 이 유틸리티의 성능과 효율을 최대한 끌어올릴 수 있습니다.

의견이나 궁금한 점이 있다면 피드백 탭을 통해 남겨 주세요.

참고 자료

이 블로그 게시물을 작성할 때 다음 문서를 참고했습니다.

  • Oracle Database Utilities — 이번 릴리스의 변경 사항(Changes in This Release for Oracle Database Utilities)