Database초보우낙

13. oracle 19c에서 data pump 사용법(19c 뉴피쳐) 본문

oracle 12c

13. oracle 19c에서 data pump 사용법(19c 뉴피쳐)

오운학 2024. 4. 30. 16:51

data pump란?

export / import의 업그레이드 버전으로 oracle 데이터 베이스 환경에서 사용되는 강력한 데이터 마이그레이션 도구.

 

date pump의 종류는?

1) table lever

2) user (스키마) level : 현업에서 가장 많이 사용

3) tablespace leve : 가장빠르고 간단하게 이행

4) database level 

 

data pump의 장점은?

1) export / import 작업을 잠깐 중지시켰다가 재시작시킬 수 있다.

2) 병렬로 작업을 할 수 있다.(가장 큰 장점)

3) export를 하기전에 작업에 필요한 디스크 공간을 미리 예측할 수 있습니다.

4) db link를 이용해서 바로 export한 pump파일을 원격지에 생성할 수 있습니다

5) 다양한 remaping이 가능하다( 두번째로 큰 장점)

 

 

 

■ dbca로 데이터베이스를 생성

 

 

 

 

 

 

 

 

DB생성완료

 

 

 

 

pump 명령어를 수행하기전에 해야하는 작업은 ???? ----> 디렉토리 생성하기

 

 


 

■ 테이블 레벨로 데이터 펌프 실습하기

orcl에서 진행

 

#2 디렉토리를 생성

[orcl:~]$ mkdir pump_orcl
[orcl:~]$ pwd
/home/oracle


--sql접속
create directory datapump_dir as '/home/oracle/pump_orcl';

 

#3. datapump_dir 디렉토리를 사용할 수 있는 권한을 scott에게 부여

grant read,write on directory datapump_dir to scott;

 

 

#4. table level로 export pump를 수행합니다

expdp scott/tiger directory=datapump_dir tables=emp dumpfile=emp_pump.dmp

 

 

#5. prod쪽의 database에 new_scott이라는 유저를 생성하고 connect, resource롤을 부여하고 접속되는지 확인

 

create user new_scott identified by tiger;

create user c##scott identified by tiger;

 

c##을 붙이고 만들면 생성가능

설명 : c##을 붙여줘야하는 이유는 멀티테넌트 아키텍쳐에서 컨테이너 데이터베이스 레벨에서는 유저 생성시 접두어로 c##을 붙여야합니다.

c##이 붙어있는 유저는 common 사용자임을 표시(어느 pdp??에서든 사용할 수 있는 사용자)

 

#6. prod db쪽에서 c##을 앞에 안붙이고 유저를 생성하는데 jones유저를 생성하세요

alter session set "_oracle_script"=true;

create user jones identified by tiger;

grant dba to jones;

 

 

#7. prod db쪽에 directory를 생성합니다

 

mkdir pump_prod

sqlplus / as sysdba

create directory prod_dir as '/home/oracle/pump_prod';

grant read, write on directory prod_dir to jones;

 

data pump를 사용해서 데이터 이행시 미리확인해야하는것은?
-> pump directory가 어딘지 확인을 해야한다.
그리고 as-is쪽의 유저명과 to-be쪽의 유저명이 뭔지 확인해야합니다
TTS를 위해서 Character set을 확인해야한다.

 

#8. /home/oracle/pump_orcl밑에 있는 emp 테이블과 관련된 pump파일을 /home/oracle/pump_pump밑으로 copy

 

cp /home/oracle/pump_orcl/emp_pump.dmp /home/oracle/pump_prod/emp_pump.dmp

 

#9. to-be 데이터베이스쪽에 emp_pump.dmp 파일을 임폴트하세요

impdp jones/tiger directory=prod_dir dumpfile=emp_pump.dmp remap_schema=scott:jones

 

 

현업에서 위의 작업을 하는경우 

-> 운영 디비쪽의 테이블을 테스트 디비쪽에 이행해야하는 경우에 많이 한다

 

remaping의 옵션의 종류는?
1) remap_tablespace
2) remap_schema
3) remap_datafile
4) remap_table
5) remap_data

 


 

■ 실습2.

 

 

 

#1. orcl쪽에서 scott계정에 가지고 있는 모든 테이블들을 전부 export data pump합니다(병렬로 작업 parallel)

expdp scott/tiger directory=datapump_dir schemas=scott dumpfile=scott_%U parallel=4

 

 

#2. pump_orcl로 가서 확인하기

cd /home/oracle/pump_orcl
ls

 

 

#3. /home/oracle/pump_orcl밑에 있는 pump 파일 전부를 /home/oracle/pump_prod로 카피하세요

cp /home/oracle/pump_orcl/*.dmp /home/oracle/pump_prod/

 

 

#4. prod쪽으로 와서 import datapump합니다.

drop table emp purge;

 

impdp system/oracle_4U directory=prod_dir dumpfile=scott_%U remap_schema=scott:jones
※ 데이터 이행을 헀으면 반드시 확인해야하는 사항!
<검증 스크립트>
1) 테이블의 갯수가 서로 같아야한다
select count(*) from user_tables;​

2) 테이블의 건수가 서로 같아야한다
select count(*) from 테이블명;​

 


3) 인덱스의 건수가 서로 같아야한다
select count(*) from user_indexes;​

4) view의 갯수도 같아야한다
 select count(*) from user_views;

5) sequence의 갯수도 같아야한다
select count(*) from user_sequences;​

6) synonym의 갯수도 같아야한다
SELECT COUNT(*) FROM user_synonyms;

7) 프로시져, 함수, 트리거의 갯수도 같아야한다
select count(*) from user_objects where object_type='PROCEDURE';
select count(*) from user_objects where object_type='FUNCTION';

8) 권한도 서로 같아야한다.
select count(*) from user_sys_privs;
select  count(*) from user_tab_privs;

drop database link prod_link

create public database link prod_link
connect to jones
identified by tiger
using '192.168.19.63:1521/PROD'

select table_name from user_tables@prod_link
minus
select table_name from user_tables;​