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 size와 characterset이 같아야 하는 단점이 있다
- 별도 옵션 사용안할시 유저가 없으면 생성(테이블오너) 해줘야함
(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 기능을 이용하여 작동
원격지 DB로 DB 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 받고 local에 impdp 수행
-- 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 |