Database초보우낙
13. oracle 19c에서 data pump 사용법(19c 뉴피쳐) 본문
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;
'oracle 12c' 카테고리의 다른 글
14. (데이터 이행 전체 과정) orcl쪽의 scott의 모든 테이블 스페이스의 테이블과 기타 object 들을 prod 쪽으로 깔끔하게 이행하는 방법 (0) | 2024.05.01 |
---|---|
13-2 (1) | 2024.05.01 |
12.하이브리드 파티션 테이블 (0) | 2024.04.30 |
11. 19C 뉴피쳐 기능2. 과도한 시스템 리소스를 사용하는 SQL 문에 대한 격리 (0) | 2024.04.30 |
10.자동으로 인덱스를 생성하는 기능 (0) | 2024.04.30 |