본문 바로가기
ORACLE/ADMIN

[Oracle] Datapump 데이터 이동, expdp impdp 유틸리티 사용

by 마이자몽 🌻♚ 2020. 7. 16.

Oracle Datapump

데이터베이스 관리에 있어서 데이터 이동은 필수적으로 꼭 알아야하는 기술입니다. 오라클 데이터베이스에서는 Export(exp)와 Import(imp) 유틸리티를 사용해서 Data Migration 작업을 했었는데요, 10g부터 Datapump를 사용해서 기존 유틸리티보다 20배가량 빠르게 작업을 완료할 수 있다고 하네요.

 

 

기존 exp, imp 유틸리티와의 차이점

Datapump가 빠르게 작업을 진행할 수 있는 이유는 내부적으로 사용하는 메커니즘이 다르기 때문입니다. 기존의 방법과는 똑같이 데이터를 이동하지만 처리 방식에 따라 속도가 다르게 측정됩니다. 적은 양의 데이터를 이동시킬때는 Export와 Import 유틸리티가 더 빠릅니다. 아무래도 대량의 데이터를 취급할때 Datapump를 사용하고 아직 exp와 imp 유틸리티는 계속 사용할 수 있으니 적은 양의 데이터를 이동 시킬때는 기존 방법을 사용하는 것이 좋을 것 같습니다.

 

속도 이외뿐만 아니라 제어방식 또한 변경되었습니다. 기존에는 클라이언트 단에서 제어가되는 툴이었다면 Datapump는 오라클 서버에서 제어가 되는 툴입니다. 그래서 Datapump의 경우 Directory 오브젝트를생성하여 사용하고 export import 작업을 진행하는 유저에게 해당 오브젝트에 대해 읽기, 쓰기 권한을 부여해줘야합니다.

 

 

실습환경

OS : Red Hat Enterprise Linux Server release 6.10
DB : Oracle 11.2.0.1
SID : orcl(export), newdb(import)
host : 601d2fce71dc

 

실습목표

-orcl 데이터베이스 hr 유저의 employees, departments 테이블을 export --> newdb 데이터베이스 scott 스키마로 import
-orcl 데이터베이스 scott 스키마 export --> newdb 데이터베이스로 import

 

 

Export expdp 실습

[oracle@601d2fce71dc ~]$ mkdir /opt/oracle/datapump

이동할 데이터의 파일 디렉토리를 만들어줍니다.

 

[oracle@601d2fce71dc ~]$ sqlplus / as sysdba
SYS@orcl> create directory pump_dir as '/opt/oracle/datapump';

Directory created.

Elapsed: 00:00:00.04
SYS@orcl> grant read, write on directory pump_dir to hr;

Grant succeeded.

디렉토리 오브젝트를 만들어주고 export 작업을 할 유저에게 권한을 부여합니다.

 

 

[oracle@601d2fce71dc ~]$ expdp -help

help 명령어를 통해서 expdp가 사용할 수 있는 옵션을 전부 확인할 수 있습니다. 이번 실습에서 기본적으로 사용하는 옵션 몇가지를 활용해서 테이블과 스키마를 export하는 실습을 해보겠습니다.

 

 

table export

[oracle@601d2fce71dc ~]$ expdp hr/hr dumpfile=hr.dmp directory=pump_dir tables=employees,departments

가장 기본이되는 export 방법입니다.

 

SYS@orcl> 
select 
    username
    ,default_tablespace
    ,temporary_tablespace 
from dba_users 
where username = 'HR';

import 작업시 tablespace의 명칭이 다르면 remap 작업이 필요하여 미리 확인하겠습니다.

 

 

schema export

[oracle@601d2fce71dc ~]$ expdp system/oracle dumpfile=scott.dmp directory=pump_dir schemas=scott

스키마 export는 system 계정으로 진행했습니다. 참조고 expdp와 impdp의 마스터 계정은 sys가 아닌 system입니다. export 작업은 사용하는 옵션도 그렇게 많지 않고 크게 문제가 되는 일을 없을 겁니다.

 

 

import 작업시 테이블 혹은 테이블스페이스의 이름이 다르면 에러가 발생합니다. remap 작업을 위해 미리 orcl 데이터베이스의 scott 스키마에 대한 정보들을 확인하겠습니다.

SYS@orcl> 
select 
    username
    ,default_tablespace
    ,temporary_tablespace 
from dba_users 
where username = 'SCOTT';

 

SYS@orcl> select table_name from dba_tables where owner = 'SCOTT';

 

 

Import impdp 실습

Import 작업은 기존에 만든 newdb 에서 작업하겠습니다. 데이터베이스는 dbca를 사용하여 새로 만들거나 커맨드로 수동으로 생성하는 작업을 진행하면 됩니다. 수동 생성작업은 아래 링크 참조.

 

[Oracle] 데이터베이스 생성 SID 추가 CREATE DATABASE 명령어 사용

OS : Red Hat Enterprise Linux Server 6.10 DB : Oracle 11.2.0.1 Oracle Database에서 DBCA를 이용하지 않고 수동으로 CREATE DATABASE 명령어를 사용해서 데이터베이스를 생성하는 실습을 하려고합니다. 새로..

myjamong.tistory.com

 

 

[oracle@601d2fce71dc ~]$ . oraenv
ORACLE_SID = [orcl] ? newdb
The Oracle base for ORACLE_HOME=/opt/oracle/app/product/11.2.0/dbhome_1 is /opt/oracle/app
[oracle@601d2fce71dc ~]$ sqlplus / as sysdba

환경변수 변경 작업과 sys 계정으로 로그인하겠습니다.

 

SYS@newdb> select username from dba_users;

수동으로 생성한 데이터베이스라 스키마가 거의 없습니다. 그럼 export했던 scott schema부터 import 작업을 해보겠습니다.

 

SYS@newdb> create directory pump_dir as '/opt/oracle/datapump';

newdb 쪽에서도 디렉토리 오브젝트를 생성해줍니다.

 

impdp 유틸리티를 사용할때 expdp와는 달리 자주 사용하게되는 remap 옵션이 있습니다. export 한정보를 기반으로 import를 하기 때문에 tablespace나 schema의 명칭이 다를 때 remap 작업을 꼭 해줘야합니다.

 

 

schema import

SYS@newdb> select tablespace_name, contents from dba_tablespaces;

Schema import 작업시 export 했을때의 정보들과 명칭이 다르면 remap 작업을 해줘야합니다. scott 계정을 import 하기위해서  default tablespace와 default temporary tablespace의 명칭을 맞춰줘야하니 미리 확인해봤습니다. 기본으로 사용할  tablespace도 만들어주겠습니다.

 

SYS@newdb> create tablespace dump datafile '/opt/oracle/app/oradata/newdb/dump01.dbf' size 200m;

스키마의 기본 테이블스페이스를 미리 만들어줬습니다. 이제 import 작업을 진행해보겠습니다.

 

 

[oracle@601d2fce71dc ~]$ impdp system/oracle dumpfile=scott.dmp directory=pump_dir remap_tablespace=users:dump

스키마를 import하는 작업으로 system 계정으로 접속해서 작업했습니다. 기본 옵션으로 directory와 dumpfile을 export한 파일의 정보로 설정하고 default temporay tablespace의 명칭은 같아 그대로 진행하고 default tablespace의 정보가 달라 remap 작업을 해줬습니다.

 

SYS@newdb> alter user scott identified by tiger account unlock;

User altered.

Elapsed: 00:00:00.01
SYS@newdb> conn scott/tiger
Connected.

스키마가 unlock되어 있는 상태에서 export 했습니다. account unlock하고 접속해보겠습니다.

 

 

SCOTT@newdb> select table_name from tabs;

TABLE_NAME
------------------------------
SALGRADE
BONUS
EMP
DEPT

Elapsed: 00:00:01.36
SCOTT@newdb> select * from dept;

    DEPTNO DNAME	  LOC
---------- -------------- -------------
	10 ACCOUNTING	  NEW YORK
	20 RESEARCH	  DALLAS
	30 SALES	  CHICAGO
	40 OPERATIONS	  BOSTON

이상없이 데이터가 이동된 것을 확인할 수 있습니다.

 

 

table import

[oracle@601d2fce71dc ~]$ impdp system/oracle dumpfile=hr.dmp directory=pump_dir remap_schema=hr:scott remap_tablespace=examples:dump

테이블만 import하게 되면 해당 테이블에 대한 권한을 없는 유저에게 부여하거나 없는 테이블과의 제약조건 등등의 이유로 오류가 발생할 수 있습니다. 데이터는 모두 들어가더라도 다른 오브젝트와의 관계에 의한 오류는 상황에 맞게 로그확인하면서 해결해주면 됩니다.

 

 

SCOTT@newdb> select table_name from tabs;

테이블이 모드 import되어 들어간것을 확인할 수 있습니다.

 

 

 

 

[Oracle] Transportable Tablespace 가장 빠른 데이터 이동 방법

Transportable Tablespace Transportable Tablespace는 오라클에서 오라클 데이터베이스로 데이터를 이동할때 가장 빠른방법이라고 합니다. 데이터펌프나 Export, Import 유틸리티를 사용할때는 그냥 insert작업..

myjamong.tistory.com

 

 

댓글0