관리 메뉴

아이짱구

Oracle expdp/impdp Utility 본문

database/oracle

Oracle expdp/impdp Utility

아이짱구 2017. 3. 28. 14:25

Data Pump

Oracle 10g의 기능인 Data Pump는 Oracle Database Data와 Meta Data의 이동을 위한 DBMS_DATAPUMP 패키지를 통하여 상당히 빠른 Data Pump Infrastructure를 제공하고 있다. 기존 Oracle 9i까지 사용되던 exp, imp 유틸리티보다 더욱더 향상된 성능을 제공한다.

Data Pump는 exp/imp 유틸리티에 비해 많은 기능을 제공하며, 대량의 데이터를 작업 할 때 빠르게 작업할 수 있다.


1. expdp


* DBA 권한 이상으로 로그인

    CONNECT /as sysdba


* 디렉토리 조회

    SQL> SELECT d.owner, directory_name, grantee, privilege, directory_path

           FROM user_tab_privs t, all_directories d

          WHERE t.table_name(+) = d.directory_name;


* 디렉토리 추가

    -- 기존 디렉토리 dpump_dir2 drop

    SQL> DROP DIRECTORY dpump_dir2;

    -- /backup/dpump 디렉토리 dpump_dir2 생성

    SQL> CREATE OR REPLACE DIRECTORY dpump_dir2 AS '/backup/dpump';


* 디렉토리에 대한 권한 설정

    SQL> GRANT READ, WRITE ON DIRECTORY dpump_dir2 TO 사용자;


* EXP_FULL_DATABASE, IMP_FULL_DATABASE 권한 부여

    SQL> GRANT EXP_FULL_DATABASE, IMP_FULL_DATABASE TO MESS_ADM;


* expdp

    # expdp system/1239 DIRECTORY=dpump_dir2 schemas=MESS_ADM \

      DUMPFILE=MESS_ADM_20081223.dmp logfile=MESS_ADM_20081223.log

    # expdp SYSTEM/1239 DIRECTORY=DPUMP_DIR2 DUMPFILE=expdp_alldata_0106.dmp \

      LOGFILE=expdp_alldata_0106.log PARFILE=expdp.par CONTENT=DATA_ONLY

    # expdp system/1239 DIRECTORY=dpump_dir2 tables=MESS_ADM.TB_ABC110 \

      DUMPFILE=tb_ABC110_20100601.dmp logfile=tb_ABC110_20100601.log \

      CONTENT=DATA_ONLY


expdp(또는 impdp) 작업 진행 중 Control+C를 누르면 export> 프롬프트(또는 import> 프롬프트) 상태가 된다. Control+C에 의해 작업이 중단 되는 것은 아니며, Interactive Mode로 변경되어 expdp(또는 impdp) 작업을 모니터링하고 제어 가능하다.


* Interactive Mode에서 사용할 수 있는 명령어

    - STATUS: 현재 작업 진행 정도 확인 가능

    - CONTINUE_CLIENT: 다시 원래 모드로 돌아감

    - KILL_JOB: 작업 프로세스 종료

    - STOP_JOB: 작업 중지

    - 나머지 명령어는 HELP 참고


expdp 주요 파라미터

 파라미터

의미 

 사용 예

filesize

 한 파일의 최대 크기로 분할해서 받을 때 사용

 bytes, kilobytes, megabytes, gigabytes

 filesize=100megabytes

parfile

 파라미터 파일

 parfile=file.par

logfile/nologfile 

 작업 로그 저장할 파일

 logfile=explog.log

compression 

 메타 데이터 압축

 11g에서는 all 옵션 추가

 metadata_only, none, all

 compression=all

content 

 expdp 작업시 어떤 내용을 포함

 all, data_only, metadata_only

 content=data_only

exclude/include 

 expdp 작업 시 원하는 오브젝트 선택 제외/포함 

 exclude=table:\"='EMP'\"

query 

 조건의 맞는 데이터만 추출

 query=emp:\"'where sal>1000'\"

sample 

 데이터 많을 때 특정 퍼센트 갯수만 추출

 0.000001~100%

 sample=scott.emp:20

network_link 

 원격지 DB에 접근하여 expdp 작업 수행

 원격지 DB Link가 생성 되어 있어야함

 network_link=emp@second_db

job_name 

 작업을 수행할 job_name을 수동 설정

 job_name=dp_a

status 

 진행 내용 갱신 주기 - 초 단위

 status=20

parallel 

 expdp 작업 수행시 사용할 process 개수

 지정한 갯수만큼 데이터 파일을 만들어야함 -%U 옵션 사용하면 자동으로 만듦

 dumpfile=datapump_%U.dmp parallel=8

attach 

 일시 중단된 작업에 다시 접속 

 attach=system.a

reuse_dumpfiles 

 dumpfile이 있으면 overwrite 

 reuse_dumpfiles=Y

transport_tablespaces 

 테이블스페이스 단위로 마이그레이션

 


출처: DBA Guide


2. impdp


* 디렉토리 조회

    SQL> SELECT * FROM dba_directories;


* 디렉토리 추가

    -- 기존 디렉토리 dpump_dir2 drop

    SQL> DROP DIRECTORY dpump_dir2;

    -- /backup/dpump 에 대한 디렉토리 dpump_dir2 생성

    SQL> CREATE DIRECTORY dpump_dir2 as '/backup/dpump';


* 디렉토리에 대한 권한 설정

    SQL> GRANT READ, WRITE ON DIRECTORY dpump_dir2 to 사용자;


* impdp

    # impdp system/1239 dumpfile=PT_ABC110_02.dmp directory=dpump_dir2 \

      job_name=job_impdp2 logfile=impdp_PT_ABC110_02.log \

      TABLES=MESS_ADM.TB_ABC110 parallel=4 TABLE_EXISTS_ACTION=APPEND


* TABLE_EXISTS_ACTION 옵션

같은 이름의 테이블이 존재할 때 SKIP / APPEND / TRUNCATE / REPLACE


3. Example


* expdp

    # expdp system/oracle directory=dpump_dir dumpfile=full_%U.dmp \

      logfile=full_%U.log job_name=expdp_full full=y

    ① system/oracle : userid/password

    ② dpump_dir : directory (※ 절대경로가 아님)

    ③ full_%U.dmp : dumpfile => parallel 옵션과 함께 사용시 파일명에 %U 사용한다.

    ④ full_%U.log : logfile

    ⑤ expdp_full  : job_name

    ⑥ full=y : DB 전체 FULL export


  - 작업 중지: 현재 Command-Line 모드로 expdp 수행중에 Ctrl+C를 누른 상태, 즉, "Export>" 프롬프트 상태가 Interactive-Command Interface 모드이다. 이 상태에서 stop_job을 수행해야 작업이 중단된다.

    Export> stop_job

    ※ 작업이 중단되더라도 나중에 다시 실행 및 취소가 가능하다.(완전 삭제는 kill_job)

    ※ Ctrl+C를 누른 상태로는 서버 기반이기 때문에 취소되지 않고 작업이 계속 진행중이다.


  - Data Pump 작업 확인

    SQL> SELECT * from dba_datapump_jobs;


  - 중지된 Job 재실행하기: attach=job_name으로 실행중이거나 중지 중인 Job에 다시 접속할 수 있다.

    # expdp system/oracle attach=expdp_full

    Export> start_job


  - 작업 내용 표시

    Export> continue_clinet


* expdp - Partitioned Table

    # expdp system/1239 DIRECTORY=dpump_dir2 \

      tables=MESS_ADM.TB_ABC110:PT_ABC110_01 \

      DUMPFILE=PT_ABC110_01.dmp logfile=PT_ABC110_01.log CONTENT=DATA_ONLY

    # expdp system/1239 DIRECTORY=dpump_dir2 \

      tables=MESS_ADM.TB_ABC110:PT_ABC110_02 \

      DUMPFILE=PT_ABC110_02.dmp logfile=PT_ABC110_02.log CONTENT=DATA_ONLY

    # expdp system/1239 DIRECTORY=dpump_dir2 \

      tables=MESS_ADM.TB_ABC110:PT_ABC110_03 \

      DUMPFILE=PT_ABC110_03.dmp logfile=PT_ABC110_03.log CONTENT=DATA_ONLY


* impdp - Partitioned Table

    # impdp system/1239 dumpfile=PT_ABC110_02.dmp directory=dpump_dir2 \

      job_name=job_impdp2 logfile=impdp_PT_ABC110_02.log \

      TABLES=MESS_ADM.TB_ABC110 parallel=4 TABLE_EXISTS_ACTION=APPEND 


    Import: Release 10.2.0.2.0 - 64bit Production on ... 2010 0:31:37


    Copyright (c) 2003, 2005, Oracle.  All rights reserved.


    Connected to: Oracle Database 10g Enterprise Edition ... 64bit Production

    With the Partitioning and Data Mining options

    Master table "SYSTEM"."JOB_IMPDP2" successfully loaded/unloaded

    Starting "SYSTEM"."JOB_IMPDP2": system/******** dumpfile=PT_ABC110_02.dmp

    directory=dpump_dir2 job_name=job_impdp2 logfile=impdp_PT_ABC110_02.log

    TABLES=MESS_ADM.TB_ABC110 parallel=4 TABLE_EXISTS_ACTION=APPEND

    Processing object type TABLE_EXPORT/TABLE/TABLE_DATA

    . . imported "MESS_ADM"."TB_ABC110":"PT_ABC110_02"       746.4 MB 18653423 rows

    Job "SYSTEM"."JOB_IMPDP2" successfully completed at 00:32:53


4. Remote DB Export 받기


* Database Link 생성

    SQL> CREATE DATABASE LINK expdp_net01 CONNECT TO system \

         IDENTIFIED BY oracle USING 'EXPDP_DOG13'


* DB Link 확인

    SQL> SELECT *

           FROM dba_db_links;


* Local DB쪽에 파일 남기기

    # expdp system/oracle NETWORK_LINK=expdp_net01 directory=dpump_dir \

      dumpfile=expdp_net01_%U.dmp logfile=expdp_net01.log \

      job_name=net_expdp_full full=y


  ※ Long TYPE 등 NETWORK_LINK로 받아지지 않는 것이 있으므로 확인 필요


* Remote DB쪽에 파일 남기기

    # expdp system/oracle@EXPDP_DOG13 directory=dpump_dir \

      dumpfile=expdp_net01_%U.dmp logfile=expdp_net01.log \

      job_name=net_expdp_full full=y


  ※ DB Link와 Network_Link를 이용하면 Local DB쪽에 dmp파일이 생성되며, Network Alias만 이용하면 Remote DB쪽에 dmp파일이 생성된다.


출처: Hoony's Story

Comments