💡 기존 export / import를 더 업그레이드 한것이 export pump / import pump
- export 로 받은 파일은?
dump 파일
- export pump 로 받은 파일은?
pump 파일
➡️ pump의 장점
1. export / import 작업을 잠깐 중지시켰다가 재시작 시킬 수 있습니다.
2. 병렬로 작업
할 수 있습니다. (가장 큰 장점)
3. export 하기 전에 작업에 필요한 디스크 공간을 미리 예측
할 수 있다.
4. db link를 이용해서 바로 export한 pump 파일을 원격지에 생성
할 수 있습니다.
5. 다양한 remaping이 가능
하다.
6. export 하면서 pump 파일을 압축을 바로
할 수 있습니다.
7. 기본 export /import 방식에 비해서 속도가 20배 정도 더 빠릅
니다. (중요)
pump 의 종류 4가지
1. table level
2. user level
3. tablespace level
4. database level
remaping 옵션
실습 순서
: sh유저의 sales table을 orcl3의 scott에게 넘길것이다. 다른 디렉토리, 다른 유저에게 pump 수행되는것을 확인가능! dump는 안된다.
- orcl2, orcl3 에서 디렉토리를 만들어준다. (익스포트, 임포트 받을 디렉토리임)
-- 1. orcl2 에서 진행 (os에서 하나, sys로 접속해서 하나 만들것임) $ mkdir /home/oracle/pump_orcl2 #익스포트하면 여기에 dmp파일 생성됨 orcl2 SYS> create directory datapump_dir #이건 이경로로 디렉토리 설정해줄거다 라는 것 ! 즉, 이 경로의 디렉토리명은 datapump_dir이다. as '/home/oracle/pump_orcl2'; -- 2. orcl3 에서 진행 (os에서 하나, sys로 접속해서 하나 만들것임) $ mkdir /home/oracle/pump_orcl3 orcl3 SYS> create directory orcl3_dir as '/home/oracle/pump_orcl3';
- orcl2, orcl3에서 export pump/ import pump 를 수행할 유저에게 directory 를 엑세스할 권한을 부여한다.
orcl2 SYS> grant read, write on directory datapump_dir to sh; orcl3 SYS> grant read, write on directory orcl3_dir to scott;
- table level로 export pump를 수행한다.
$ expdp sh/sh directory=datapump_dir tables=sales dumpfile=sales_pump.dmp -- 수행하면 만들어둔 /home/oracle/pump_orcl2/ 에 dmp파일이 생성된다.
- /home/oracle/pump_orcl2 밑에 있는 sales_pump.dmp를 /home/oracle/pump_orcl3 밑으로 카피한다.
$ cp /home/oracle/pump_orcl2/sales_pump.dmp /home/oracle/pump_orcl3/sales_pump.dmp
- 그리고 orcl3에서 아래와 같이 임포트를 해준다.
$ .oraenv orcl3 $ impdp scott/tiger directory=orcl3_dir dumpfile=sales_pump.dmp remap_schema=sh:scott remap_tablespace=example:ts1000 orcl2 -----------------------------------> orcl3 /home/oracle/pump_orcl2 /home/oracle/pump_orcl3 디렉토리명: datapump_dir 디렉토리명: orcl3_dir 테이블: sales 테이블: sales 유저: sh 유저: scott ts: example ts: ts1000
✅ orcl2에 있는 sh의 sales테이블을 export pump를 받았고, orcl3_dir에 가져다 놓았다.
실습 순서
: orcl2 scott의 모든 테이블을 orcl3 smith라는 유저에게 임포트 한다.
- scott이 가지고 있는 모든 테이블을 전부 export data pump! directory는 위 1번 실습에서 만들어준
datapump_dir
로 설정.$ expdp scott/tiger directory=datapump_dir schemas=scott dumpfile=scott.dmp
💡 병렬로 하는 방법 :
parallel
을 사용하면 되는데 숫자는show parameter cpu_count
의 *2 하면 된다.$ expdp scott/tiger directory=datapump_dir schemas=scott dumpfile=scott2.dmp parallel=4
- orcl3에 smith유저를 생성하고 권한을 준다.
SYS @ orcl3> create user smith identified by tiger; SYS @ orcl3> grant connect, resource to smith;
- /home/oracle/pump_orcl2 밑에 있는 scott.dmp를 home/oracle/pump_orcl3밑에 복사하기!
$ cp /home/oracle/pump_orcl2/scott.dmp /home/oracle/pump_orcl3/scott.dmp
- orcl3에서 scott.dmp를 import pump합니다.
[orcl3:~]$ impdp system/oracle directory=orcl3_dir dumpfile=scott.dmp remap_schema=scott:smith
- 병렬로 수행했다면 병렬도를 다시 1로 변경해주기!
💡 병렬로 작업할 때는 dumpfile명에 %U를 쓸수있다. %U를 쓰면 오라클이 알아서 dump 파일 명을 병렬도에 맞춰서 생성함!
✔️ orcl2에서 작업
- ts2000 테이블 스페이스 생성
- scott 유저로 접속해서 ts2000 테이블 스페이스에서 emp2000 테이블 생성
- ts2000 테이블 스페이스를 read only로 변경하기
- ts2000 테이블 스페이스를 export 하기 (directory는 위에서 생성한 orcl2의 디렉토리!)
$ expdp directory=datapump_dir dumpfile=ts2000.dmp transport_tablespace=y tablespaces=ts2000
- /u01/app/oracle/oradata/orcl2/ts2000.dbf 파일을 /u01/app/oracle/oradata/orcl3/ts2000.dbf에 copy하기
- /home/oracle/pump_orcl2 밑에있는 ts2000.dmp를 /home/oracle/pump_orcl3 밑에 copy하기
✔️ orcl3에서 작업
- orcl3에 ts2000.dmp 파일을 임폴터 데이터 펌프 합니다. (directory는 위에서 생성한 orcl3의 디렉토리!)
$ impdp directory=orcl3_dir dumpfile=ts2000.dmp transport_datafiles='/u01/app/oracle/oradata/orcl3/ts2000.dbf'
- ts2000 테이블 스페이스를 read write합니다.
- scott 계정에서 emp2000 테이블 조회가 되는지 확인
❗️ 주의사항 : tablespace는 export할 때 read only로 변경해주고 후에 read write로 다시 바꿔주기.
$ expdp directory=datapump_dir full=y file=complete02.dmp