[오라클]Data Pump
Data Pump
create directory cms_pump as '/oracle/redkite';
expdp \"/ as sysdba \" schemas=ADMINIBDEMO,ADMINIBDEMO30 directory=cms_pump dumpfile=mig
create directory cms_pump as '/oracle/redkite';
impdp \"/ as sysdba \" schemas=ADMINIBDEMO,ADMINIBDEMO30 REMAP_TABLESPACE=ADMIN_TS:ADMIN_TS directory=cms_pump dumpfile=mig
expdp userid=\"/ as sysdba\" full=y dumpfile=db1.dmp logfile=db1_exp.log
expdp \"/ as sysdba \" schemas=quicsusr,adminibusr,ibfusr directory=kbst2nd_pump dumpfile=mig
create directory kbst2nd_pump as '/oracle/app/oracle/product/1020/db/work';
impdp \"/ as sysdba \" schemas=quicsusr,adminibusr,ibfusr REMAP_TABLESPACE=usrtbl:usertbl directory=kbst2nd_pump dumpfile=mig
impdp userid=\"/ as sysdba\" full=y dumpfile=db1.dmp logfile=db1_imp.log
1.1. Oracle Data pump란?
Oracle Data Pump는 Oracle Database 10g 버전에서 제공되는Utility로 향상된 데이터 이동을 가능하게 한다.
이전 버전의 오라클을 설치한 홈 디렉토리에는 ‘imp’,’exp’라는 실행 파일이 있다. 이는 오라클에서 제공하는 backup 및 recovery 에 사용되는 도구 이다.
Exp는 데이터베이스에 저장되어 있는 데이터들을 OS의 바이너리 파일로 전환하는 도구이고, imp는 바이너리 파일을 데이터베이스 안의 데이터로 전환하는 도구이다. 새로 등장한Data Pump는 exp 와 imp를 대체하기 위하여 오라클 10g 버전부터 제공되는 유틸리티로 Exp / Imp 와 유사한 동작을 하지만 data pump 가 훨신 효율적으로 동작한다.
Exp/Imp와 비교하여 그 효율성을 예를 들자면 exp시 single thread 에서 2배가 빠르고 imp시 15~45배 빠르므로 데이터베이스간의 bulk data 와 meta data의 전송시간을 줄이는데 효율적으로 사용될 수 있다.
1.2. Data pump Key features
1.2.1. Fast Performance
앞에서 말한 것과 같이Data Pump Export and Import 유틸리티는 기존의 Export and Import 유틸리티보다 훨씬 빠르다. Data Pump Export 에서 direct path method를 사용시 single stream data unload에서 기존의 export 보다 2배가 빠르다. 이는 direct path API가 더 효과적으로 수정 되었기 때문이다. Parallelism 의 level에 따라서는 더욱 향상된 performance를 보일 수 있다.
Data pump import 에서는 single stream 의 data load 시 기존의 import 보다 15~45배가 빠르다. 이는 기존의 import 에서 단순히 export dump파일에서 레코드를 읽고 일반적인 insert into 명령을 사용해서 대상 테이블에 삽입 하는 대신에 Data pump import 는Direct path method loading 을 사용하기 때문이다.
1.2.2. Improved Management Restart
모든 Data Pump operation은 Data Pump job을 실행하는 스키마에 만들어진 master table을 가지고 있다. Master table은 현재 수행중인 모든 export또는 import시 객체의 상태정보와 dump file set에서의 위치정보를 가지고 있다. 이는 갑작스런 job의 중단에도 job 의 성공적인 종료에 상관 없이 어떤 object의 작업이 진행 중이었는지 알 수 있게 해 준다. 그래서 master table 과 dump file set 이 있는 한 모든 정지된 data pump job은 데이터 손실 없이 다시 시작할 수 있다.
1.2.3. Fine-Grained Object Selection
Data Pump job 은 거의 모든 type의 object를 exclude 또는 include 시킬 수 있다.
아래의 parameter 가 사용된다.
* EXCLUDE - 특정 객체 유형을 제외한다. (예: EXCLUDE=TABLE:EMP)
* INCLUDE - 특정 객체 유형을 포함한다. (예: INCLUDE=TABLE_DATA)
* CONTENT - 로드를 취소할 데이터를 지정한다.
적합한 키: (ALL), DATA_ONLY 및 METADATA_ONLY.
* QUERY - 테이블의 부분 집합을 엑스포트하기 위해 사용되는 술어 절이다.
1.2.4. Monitoring and Estimating Capability
Data Pump는 Standard progress , error message를 log file에 기록할 뿐만 아니라 현재 operation의 상태를 대화식모드 ‘command line’으로 보여 준다. Job의 completion percentage를 측정하여 보여주며 초 단위의 지정한 time period에 따라 자동으로 update하여 표시한다.
1개 이상의 client가 running job에 attach 수 있기 때문에 업무환경에서 job을 실행하고, detach 한 후 집에 가서 job을 reattach 하여 끊김 없이 모든 job을 모니터링 할 수 있다.
모든export job이 시작할 때 대략적인 전체unload양을 측정해 준다. 이는 사용자가 dump file set을 위한 충분한양의 disk space를 할당할 수 있게 한다.
1.2.5. Network Mode
Data Pump Export and Import는 job의 source가 리모트 인스턴스 일 경우를 위한 network mode를 지원한다.
Network을 통해 import를 할 때 source가 dump file set이 아닌 다른 database에 있기 때문에 dump file이 없다.
Network를 통해 export를 할 때 souce가 다른시스템에 있는 read-only database 일 수 있다. Dumpfile은 local(non-networked)export 처럼 local 시스템에 쓰이게 된다.
1.3. Data pump overview
1.3.1. Data Pump Overview
- expdp/impdp로 제공 되어 진다.
- exp/imp의 superset 이다.
- Data 와 metadata를 매우 빠른 속도로 load/unload 하는 Server-based facility이다.
==> dump file sets은 Server에 생성
- DBMS_DATAPUMP PL/SQL Package를 이용하여 사용 가능 하다.
- Web-based interface <--access from EM Database Control이 가능하다.
- Data Pump job을 실행하는 schema에 master table(MT)이 만들어 진다.
MT는 해당 job의 모든 것(aspects)을 관리하며 data pump(expdp)의 마지막 단계에서 pump file sets에 기록된다.
file based import 작업(impdp)시 dump file에 있는 MT 내용을 current user의 schema에 제일먼저 loading한다.
계획 또는 예상치 못한 job의 중단 시 재가동수 있게 하는 Data Pump의 핵심이 MT 이다.
Client process는 Data Pump API를 call한다.
-여러 개의 clients가 모니터링하고 control하기 위해서 job을 attach/detach 한다.
1.3.2. Data Pump Benefit
- Data Access Methods : Direct Path, External Tables
- Detach from, reattach to log-running jobs
- Restart Data Pump Jobs
- Find-grained object selection <-- 원하는 rows만(EXCLUDE, INCLUDE, CONTENT)
- Explicit database version specification
- Parallel execution
- Estimate export job space <--ESTIMATE_ONLY
- Network Mode에서는 Remote의 server process가 DB link를 이용하여 Local에 dump file을 직접 만들어 준다..
- Import 과정에서 target data file name, schema, tablespace 을 변경할 수 있다.
1.3.3. Data Pump File Locations
- Data pump file 종류
- DUMP file : data와 metadata를 포함한다.
- LOG file : operation과 관련된 message를 기록한다.
- SQL file : impdp에서 SQLFILE operation의 결과를 기록한다.
- Data Pump는 server-based 이므로 Oracle directory path를 통해서 Data Pump file에 access한다.
Absolute path는 보안상 지원되지 않는다.
- Order of precedence of file locations
1) per-file directory
- dump file, log file, sql file 마다 지정될 수 있다. 콜론(:)으로 directory 와 file name 을 구분한다.
예) dumpfile=AA:A.dmp
2) DIRECTORY parameter
- directory object를 사용한다.
Create Directory DIR_PJH as '/home/oracle10g/test/';
Grant read, write On Directory DIR_PJH to SCOTT;
Directory=AA
Dumpfile=A.dmp
3) DATA_PUMP_DIR 환경변수
- DIRECTORY Parameter를 대신하여 directory object name을 설정한다.
export DATA_PUMP_DIR=AA
Dumpfile=A.dmp
- 위의 모든 경우에 시도하려는 operation에 대해 directory object에 대해 적절한 access privs가 있어야 한다.
Export할 경우 모든 file에 대해 write access가 필요하다.
Import할 경우 dump file에 대해 read access, log file과 sql file에 대해 write access가 필요하다.
1.3.4. Data Pump File Naming and size
(1) DUMPFILE
- file list는 , 로 분리한다.
- %U template --> two-character, fix-width, 01부터 증가하는 integer 를 가진다.
- DUMPFILE 이 지정되어 있지 않으면 expdat.dmp 가 default로 사용된다. Default는 autoextensible이다.
(2) FILESIZE
- FILESIZE 가 지정되어 있으면 각 file은 FILESIZE안으로 만들어지고 늘어날 수 없다. dump 공간이 더 필요하고 template %U가 지정되었다면, 새로운 파일이 생성된다. 그렇치 않으면 사용자는 new file을 add하라는 메세지를 받는다.
(3) PARALLEL
- %U가 지정되면 PARALLEL parameter의 개수만큼 초기에 file이 생성된다.
- 기존에 존재하는 file과 이름이 중복될 경우 overwrite하지 않고 에러를 발생시키고 job이 abort된다.
- 복수개의 dump file template가 제공되면 round-robin fashion으로 dump file을 생성하는 데 사용한다.
1.3.5. Data Pump Filtering
(1) Find-grained object selection
- 기존의 exp/imp는 index, trigger, grant, constraint를 포함하거나 제외하는 것이 있으나
data pump는 virtually any type of object를 포함하거나 제외할 수 있다.
- EXCLUDE 와 IMCLUDE는 mutually exclusive 하다.
- INCLUDE = object_type[:"name_expr"]
- EXCLUDE = object_type[:"name_expt"]
- 모든 view, 모든 package, EMP로 시작하는 Index만 제외한다.
EXCLUDE=view
EXCLUDE=package
EXCLUDE=INDEX:"LIKE 'EMP%' "
(2) Data Selection
- CONTENT = ALL(def) | METADATA_ONLY | DATA_ONLY
- QUERY = [Schema.][table_name:]"query_clause"
- CONTENT에 data_only가 사용되면 EXCLUDE 와 INCLUDE를 사용할 수 없다.QUERY=hr.employees:"WHERE department_id in (10,20) and salary < 1600 ORDER BY department_id"
<--특정 table을 지정해서 해당 table로 한정. imp시에도 적용.
1.3.6. Data Pump Job Monitoring
- 데이터베이스 뷰에서 실행되는 Data Pump 작업에 관해서도 자세한 정보를 확인할 수 있다.
- DBA_DATAPUMP_JOBS – 작업에서 실행되는 작업자 프로세스(DEGREE 열)의 수를 확인 할 수 있다.
- DBA_DATAPUMP_SESSIONS –이전 뷰 및 V$SESSION과 조인하여 foreground 프로세스 세션의 SID확인 할 수 있다.
select sid, serial# from v$session s, dba_datapump_sessions d where s.saddr = d.saddr; |
- V$SESSION_LONGOPS - 작업 완료에 걸리는 시간을 예측하는 또 다른 유용한 정보를 얻을 수 있다.
select sid, serial#, sofar, totalwork from v$session_longops where opname = 'CASES_EXPORT' and sofar != totalwork; |
totalwork 열에는 총 작업량이 표시되는데, 이 중 현재까지 sofar 작업량을 완료했으므로 이를 통해 얼마나 더 시간이 걸릴지 예측할 수 있다.
1.3.7. Data Pump Export and Import
1) Parallel Full Export and Import
> expdp system/manager full=y parallel=4 dumpfile=DATADIR1:full1%U.dat, DATADIR2:full2%U.dat, DATADIR3:full3%U.dat, DATADIR4:full4%U.dat filesize=2G |
<--4개의 work process를 가진 full export,
Pump file은 DATADIR1, DATADIR2, DATADIR3, DATADIR4 네 곳에 라운드로빈 방식으로 생성된다.
2G를 넘지 않으면서 최소4개 생성.
Job 과 master table 이름은 default로 SYSTEM_EXPORT_FULL_01 를 가진다.
>impdp system/manager directory= NET_STORGAE_1 parallel=4 dumpfile= full1%U.dat, full2%U.dat, full3%U.dat, full4%U.dat |
<--expdp로 받은 dump file을 network를 통해 NET_STORAGE_1 이라는 directory object위치로 보내졌다. Default import는 dump set 전체를 import하는 것이므로 Full=y 는 필요 없다.
Job 과 master table 이름은 default로 SYSTEM_IMPORT_FULL_01 를 가진다.
2) Limited Schema Export (fine-grained)
directory=USR_DATA dumpfile=schema_hr_oe.dat parfile=exp_par.txt <---------------------------- |
<--HR, OE schema에서 모든 func, prod, pkg, user-defined type, PRODUCT로 시작하는 view를 export한다.
Schema definition과 system priv graints는 export되지 않는다.
> impdp system/manager directory=USR_DATA dumpfile=schema_hr_oe.dat sqlfile=schema_hr_oe.dat |
<--실제 import는 하지 않고 dmp file에서 DDL 문장만 뽑아낸다.
3) Network Mode Import (DB Link)
network_link=finance.hq.com <--db link remap_schema=payroll:finance |
> impdp system/manager schemas=hr,sh,payroll
parfile=imp_par.txt <--------------------------------
<--Source DB에 dblink로 붙어서 hr, sh, payroll schema를 가져온 다음 imp 한다.
이때 payroll schema로 finance schema로 만들어 진다.
SYSTEM은 IMPORT_FULL_DATABASE role을 가지고 있고 Source DB에 대해서는 EXPORT_FULL_DATABASE role을 가지므로 Target DB에 해당 schema definition이 없으면 만들어진다.
flashback_time은 예전의 CONSISTENT와 동일하다.
4) Data-Only Unload
> expdp hr/hr parfile=exp_par.txt dumpfile=expdat.dmp content=data_only
include=table:"in ('DEPARTMENTS','DEPARTMENTS_HIST','EMPLOYEES','EMP_HIST')"
query="where DEPARTMENT_ID != 30 order by DEPARTMENT_ID"
1.3.8. Data Pump restarting
1) Attaching to Existing Job
> expdp system/manager attach=EXP_TS1
<--Job name(MT name) :dba_datapump_jobs 해당 스키마에 active export job 이 하나만 있을 경우 안 적어도 된다.. |
job: EXP_TS1
owner: SYSTEM
mode:
status:
Export> STOP_JOB
<--중지.
Attach session은 terminate 되고 실행되던 job은 controlled fashion으로 run down 된다.
해당 Job은 dump file과 SYSREM.EXP_TS1 table이 disturbed 되지 않는 한 startable 하다.
2) Restarting Stopped Job
> expdp system/manager attach=exp_ts1
<--같은 schema안에 여러 개의 outstanding job이 있으면 job name지정한다.
Export> parallel=4 |
<-- detailed per-work process가 10분 단위로 regular status message를 보여준다.
KILL_JOB로 job을 kill한다.
<--status, status=600(초)
stop_job,
start_job,
continue_client: attach한 session이 계속 받아서 expdp 실행한다.(logging mode로 전환)
exit_client: Attach를 빠져 나옴. expdp는 background로 실행한다.
1.4. Data pump 실습
1.4.1. 전체 데이터베이스 export 실습
SQL> conn /as sysdba
연결되었습니다.
SQL> create directory dump as 'C:₩oracle/backup'; ->directory를 생성한다.
디렉토리가 생성되었습니다.
SQL> grant read ,write on directory dump to public; -> directory에 권한을 부여한다.
권한이 부여되었습니다.
SQL> host
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.
C:₩oracle>expdp system/oracle dumpfile=full.dmp directory=dump full=y job_name=Lucie
Export: Release 10.2.0.1.0 - Production on 화요일, 29 5월, 2007 17:17:41
Copyright (c) 2003, 2005, Oracle. All rights reserved.
접속 대상: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the OLAP and Data Mining options
"SYSTEM"."LUCIE" 시작 중: system/******** dumpfile=full.dmp directory=dump full=y job_name=Lucie
BLOCKS 메소드를 사용하여 예측 진행 중...
객체 유형 DATABASE_EXPORT/SCHEMA/TABLE/TABLE_DATA 처리 중
BLOCKS 메소드를 사용한 총 예측: 66.56 MB ->대략적인dmp파일 size를 예측할 수 있다.
객체 유형 DATABASE_EXPORT/TABLESPACE 처리 중
객체 유형 DATABASE_EXPORT/SYS_USER/USER 처리 중
객체 유형 DATABASE_EXPORT/SCHEMA/USER 처리 중
객체 유형 DATABASE_EXPORT/SCHEMA/TABLE/POST_INSTANCE/PROCDEPOBJ 처리 중
. . "SCOTT"."DEPT" 48.00 MB 2097152행이 엑스포트됨
. . "SYSMAN"."MGMT_JOB_CRED_PARAMS" 11.70 KB 18행이 엑스포트됨
. . "SYSMAN"."MGMT_JOB_PROP_PARAMS" 8.820 KB 12행이 엑스포트됨
. . "SYSMAN"."MGMT_JOB_STEP_PARAMS" 127.3 KB 1128행이 엑스포트됨
Control + c ->중간에 끊어도 job이 끊기지 않고 명령모드로 들어간다.
Export>status 작업자 1 상태: 완료된 객체: 45 Export> stop_job -> job 을 정지시킨다. |
C:₩oracle>
C:₩oracle>sqlplus "/as sysdba"
SQL*Plus: Release 10.2.0.1.0 - Production on 화 5월 29 17:32:59 2007
Copyright (c) 1982, 2005, Oracle. All rights reserved.
다음에 접속됨:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the OLAP and Data Mining options
SQL>select owner_name,job_name,operation,job_mode,state from dba_datapump_jobs;
OWNER_NAME JOB_NAME OPERATION JOB_MODE STATE
---------- ---------- ------------ ----------- ------------
SYSTEM LUCIE EXPORT FULL NOT RUNNING
->job 상태를 확인할 수 있다.
SQL> exit
C:₩oracle>expdp system/oracle attach=lucie ->job을 다시 attach한다.
Export: Release 10.2.0.1.0 - Production on 화요일, 29 5월, 2007 17:35:54
Copyright (c) 2003, 2005, Oracle. All rights reserved.
접속 대상: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the OLAP and Data Mining options
작업: LUCIE
소유자: SYSTEM
작업: EXPORT
생성자 권한: FALSE
GUID: 18405C1B820C4ABB9B30C4948E0D356F
시작 시간: 화요일, 29 5월, 2007 17:35:56
모드: FULL
인스턴스: ora10
최대 병렬도: 1
EXPORT 작업 매개변수:
매개변수 이름 매개변수 값:
CLIENT_COMMAND system/******** dumpfile=full.dmp directory=dump full=y job_name=Lucie
상태: IDLING
처리된 바이트: 51,646,000
완료율: 99
현재 병렬도: 1
작업 오류 수: 0
덤프 파일: C:₩oracle/backup₩full.dmp
기록된 바이트: 55,914,496
작업자 1 상태:
상태: UNDEFINED
SQL>select owner_name,job_name,operation,job_mode,state from dba_datapump_jobs;
OWNER_NAME JOB_NAME OPERATION JOB_MODE STATE
---------- ---------- ------------ ----------- ------------
SYSTEM LUCIE EXPORT FULL IDLING
->job 상태를 확인할 수 있다.
Export> start_job ->Job을 다시restar한다.
Export> status
작업: LUCIE
작업: EXPORT
모드: FULL
상태: COMPLETING
처리된 바이트: 51,646,001
완료율: 100
현재 병렬도: 1
작업 오류 수: 0
덤프 파일: C:₩oracle/backup₩full.dmp
기록된 바이트: 64,684,032
작업자 1 상태:
상태: WORK WAITING
C:₩oracle>
Logfile 확인
지정한 directory 위치에 “export” log file을 확인 한다. 파일의 끝부분을 보면 성공적으로 완료됨을 확인할 수 있다.
"SYSTEM"."LUCIE" 작업이 17:18:56에서 사용자 요청에 의해 정지됨
|
1.4.2. 특정 스키마 DDL 스크립트 생성 실습
SQL> conn /as sysdba
SQL> grant read ,write on directory dump to public; -> directory에 권한을 부여한다.
Copyright (c) 2003, 2005, Oracle. All rights reserved. 접속 대상: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
|
Logfile 확인
- dump로 지정된 C:₩oracle/backup에 ddl_scoot.sql파일이 생성된다.
-- CONNECT SYSTEM -- CONNECT SYSTEM |
1.4.3. 존재하는 table import
1) content=data_only 포함한 경우
C:₩oracle>Impdp system/oracle dumpfile=full.dmp directory= dump content=data_only job_name=data_import logfile=table_log tables=scott.dept Import: Release 10.2.0.1.0 - Production on 화요일, 29 5월, 2007 19:42:15 Copyright (c) 2003, 2005, Oracle. All rights reserved. 접속 대상: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production |
2) content=data_only 포함하지 않은 경우
C:₩oracle>Impdp system/oracle dumpfile=full.dmp directory= dump job_name=data_import logfile=table_log tables=scott.dept Import: Release 10.2.0.1.0 - Production on 화요일, 29 5월, 2007 19:41:02 Copyright (c) 2003, 2005, Oracle. All rights reserved. 접속 대상: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production |
* 임포트 프로세스의 기본 작업 방식은 테이블 및 연관된 모든 객체를 생성하고 테이블이 있는 상태에서 오류를 만들어 낸다.
다음 명령은 대화형 모드에서 적합합니다.
참고: 약어도 허용됨
다음 명령은 대화형 모드에서 적합합니다.
참고: 약어도 허용됨
'01.오라클 > 003.DB 백업 및 복구' 카테고리의 다른 글
[오라클]아카이브 복구 (0) | 2012.12.19 |
---|---|
[오라클]아카이브 모드 변경 (0) | 2012.12.19 |
[오라클]아카이브 모드 변경 (0) | 2012.12.19 |
[오라클]VMware 백업 복구 작업 (0) | 2012.12.19 |
[오라클]FlashBack (0) | 2012.12.19 |