반응형

DataPump

● DataPump 특징

1. 수행 속도가 빠르다

- parallel 4 이상해야 수행 속도가 export보다 빠르다

2. 일시 중단 후 다시 이어서 작업을 할 수 있다

3. 작업 시간을 예상할 수 있다

4. OS 파일에 직접 접근할 수 없어 보안이 우수하다

 

expdp 실행 모드

(1) Full 모드

- Full 이란 파라미터를 사용

- 데이터베이스 전체를 export 받을 수 있다

- DBA 권한을 가지고 있거나 export_full_database권한을 가지고 있어야 수행할 수 있다

(2) Schema 모드

- Schemas 파라미터를 사용

- 특정 스키마 전체를 export 받을 수 있다

(3) Tablespace 모드

- Tablespaces 파라미터를 사용

- 해당 테이블스페이스에 속한 모든 테이블을 받을 수 있다

- 만약 transport_tablespace 파라미터를 사용한다면 테이블 스페이스 정보가 다르더라도 다른 DB로 동일하게 impdp할 수 있음

* block 크기가 맞아야함

- transport_tablespace를 사용하려면 양쪽 데이터베이스의 OS, block sizecharacterset이 같아야 하는 단점이 있다

- 별도 옵션 사용안할시 유저가 없으면 생성(테이블오너) 해줘야함

(4) Table 모드

- Tables 파라미터를 사용

- 여러 개의 테이블을 export 받으려면 콤마로 구분

 

expdp 파라미터 정리

1) directory : 디렉토리 오브젝트를 지정해서 덤프파일 및 로그 파일의 위치를 지정

directory=directory_object_name형식으로 지정하여 사용

 

2) dumpfile : 파일 시스템에 저장될 덤프파일의 이름을 지정해주는 파라미터

Dumpfile=dumpfile_%U와 같은 형식

%U는 파일이 여러 개로 나누어질 때 사용

01-99까지 자동증가

사용자가 덤프파일을 지정하지 않으면 expdat.dmp라는 파일으로 자동으로 지정

 

3) logfile / nologfile : 작업내용을 저장할 로그파일명 지정

Logfile = logfile 형식으로 로그 파일명 지정

파라미터를 지정하지 않으면 expdp를 저장하는 곳에 export.log라는 파일명으로 생성

로그파일을 남기고 싶지 않으면 Nologfile=Y을 사용

 

4) compression : export 파일을 압축하여 저장

ex) expdp scott/tiger dumpfile = scott00.dmp directory = datapump compression=all

* 이름 겹칠 시 : 이름포맷 바꾸기, 기존파일 삭제, reuse_dumpfiles 옵션 사용, mv

5) network_link : 원격지에 있는 데이터베이스에 접근하여 데이터를 expdp 작업을 할 경우에 사용

DB Link 기능을 이용하여 작동

원격지 DBDB Link가 생성되어 있어야 가능

ex) $?~~scott10.dmp network_link=emp@db_link_name

 

6) parallel : parallel 작업 수행 시 프로세스 개수

ex) $~~scott10.dmp …….. parallel=4

 

7) reuse_dumpfiles : 저장하고자 하는 덤프파일명이 있을 경우 해당 파일을 덮어쓰도록 하는 옵션

reuse_dumpfiles=Y 설정 시 덮어쓰고 설정 안 하면 N가 기본

 

 

impdp 관련 파라미터

1) Table_exists_action : 테이블이 이미 있을 경우 action

skip : 같은 테이블을 만나면 건너뜀

append : 기존 내용에 데이터를 추가

truncate : 기존 테이블을 truncate 하고 새로 impdp

drop : 기존 테이블을 drop 하고 새로 만들어서 impdp

2) Remap_schema : 다른 유저로 impdp 할 경우 사용

remap_schema=scott:hr

export/import에서 from scott to hr 와 같음

3) Remap_datafile : 기존 서버의 데이터파일 정보를 이전 후 서버의 데이터 파일로 매핑

ex) remap_datafile='/data1/users01.dbf':'/data2/users01.dbf','/data1/test.dbf':'/data2/test.dbf'

4) Remap_tablespace : 테이블 스페이스 정보가 다를경우 명시

ex) remap_tablespace='users':'example'

5) Remap_table : 기존 테이블 이름을 impdp 하면서 변경할 경우 사용

ex) remap_table=emp:emp100

6) Network_link : 원격지에 impdp

7) Partition_options : 파티션되어 있던 테이블을 단일 테이블로 impdp할 경우

ex) partition_options=merge

8) Data_options=skip_constrait_errors : 제약조건 위배 시 에러 무시하고 진행

 

------------------------------------------------------------------

--------------------------------------------------------------------------

--step1. 테스트용 계정과 테스트용 테이블을 생성

create user tuser identified by abc123

default tablespace users

temporary tablespace temp2;

 

select systimestamp from dual; --2015/12/16 22:44:52 +09:00

 

grant connect, resource to tuser;

 

create table tuser.test1 (no number);

create table tuser.test2 (no number);

 

insert into tuser.test1 values(1);

insert into tuser.test1 values(2);

insert into tuser.test2 values(3);

insert into tuser.test2 values(4);

 

commit;

 

select * from dba_temp_files;

 

--step2. 테스트용 계정 tuser를 삭제한 후 데이터를 확인

drop user tuser cascade;

 

select * from tuser.test2;

--ERROR at line 1:

--ORA-00942 : table or view does not exist

 

--step3. Flashback 명령어로 복구

flashback database to timestamp(to_timestamp('2015/12/16 22:45:00','YYYY/MM/DD HH24:MI:SS'));

--ERROR at line 1:

--ORA-38757 : Database must be mounted and not open to FLASHBACK

 

SYS> shutdown immediate

SYS> startup mount;

SYS> flashback database to timestamp(to_timestamp('2015/12/16 22:45:00','YYYY/MM/DD HH24:MI:SS'));

 

SYS> alter database open;

--alter database open

--ERROR at line 1:

--ORA-01589 : must use RESETLOGS or NORESETLOGS option for database open

 

SYS> alter database open resetlogs;

 

select * from tuser.test1;

 

-------------------------------------------------------------------------------

create public database LINK my_orcl

CONNECT TO system IDENTIFIED BY "imsi00"

using '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)

(HOST=172.16.1.52)(PORT=1521))

(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=ORCL2)))';

 

select * from dba_db_links;

 

select instance_name,host_name from v$instance@my_orcl;

 

--datapump 사전 준비

SQL > !mkdir -p /oracle11/datapump;

 

create or replace directory datapump as '/oracle11/datapump';

grant read,write on directory datapump to scott;

 

select * from dba_directories;

 

 

--empdp 수행(특정테이블)

SQL > !expdp system/imsi00 tables=flashback_test1 directory=datapump dumpfile=flashback_test1.dmp;

SQL > !expdp scott/imsi00 schemas=scott directory=datapump dumpfile=scott;

SQL > !expdp systemp/imsi00 full=y directory=datapump dumpfile=full01.dmp;

 

SQL > !expdp system/imsi00 full=y directory=datapump parallel=4 dumpfile=full1%U.dat logfile=full1.log

-- top -c

select * from v$parameter

where name like '%pool%';

 

alter system set shared_pool_size=50m;

alter system set sga_target=400m scope=spfile;

alter system set sga_max_size=512m scope=spfile;

 

 

test1) expdp 받은 dump파일을 이용한 impdp

-- step1) table 삭제

drop table flashback_test1;

select * from flashback_test1;

 

-- step2) impdp 수행

SQL > !impdp system/imsi00 directory=datapump dumpfile=flashback_test1.dmp nologfile=y;

 

select * from flashback_test1;

 

 

test2) db_link를 통한 impdp 수행

--step1) db링크 걸기 위에서했음

--step2) test table 생성(ORCL)

create table scott.impdp_test1(a number);

 

insert into scott.impdp_test1 values(1);

insert into scott.impdp_test1 values(2);

 

commit;

 

select * from scott.impdp_test1;

 

--step3) impdp 수행(TESTDB)

SQL > !impdp scott/imsi00 tables=scott.impdp_test1 network_link=my_orcl nologfile=y;

-- network_link에 설정된 DB에서 expdp 받고 localimpdp 수행

-- network_link를 이용하면 굳이 export를 수행할 필요없이 import가능

 

impdp 관련 파라미터

1) Table_exists_action : 테이블이 이미 있을 경우 action

skip : 같은 테이블을 만나면 건너뜀

append : 기존 내용에 데이터를 추가

truncate : 기존 테이블을 truncate 하고 새로 impdp

drop : 기존 테이블을 drop 하고 새로 만들어서 impdp

 

2) Remap_schema : 다른 유저로 impdp 할 경우 사용

remap_schema=scott:hr

export/import에서 from scott to hr 와 같음

 

3) Remap_datafile : 기존 서버의 데이터파일 정보를 이전 후 서버의 데이터 파일로 매핑

   ex) remap_datafile='/data1/users01.dbf':'/data2/users01.dbf','/data1/test.dbf':'/data2/test.dbf'

 

4) Remap_tablespace : 테이블 스페이스 정보가 다를경우 명시

   ex) remap_tablespace='users':'example'

 

5) Remap_table : 기존 테이블 이름을 impdp 하면서 변경할 경우 사용

   ex) remap_table=emp:emp100

 

6) Network_link : 원격지에 impdp

 

7) Partition_options : 파티션되어 있던 테이블을 단일 테이블로 impdp할 경우

   ex) partition_options=merge

 

8) Data_options=skip_constrait_errors : 제약조건 위배 시 에러 무시하고 진행

 

'Study Note > Database' 카테고리의 다른 글

SQL 함수  (0) 2016.02.03
SQL 기본 [ SELECT ]  (0) 2016.02.03
Flashback  (0) 2016.02.02
DBMS JOB & Scheduler  (0) 2016.02.02
User 관리하기  (0) 2016.02.02

+ Recent posts