Oracle DB 데이터 마이그레이션이 필요할때, 크게 두가지 방법으로 나뉜다.
1) expdp/impdp 명령어를 통해, 파일 기반으로 마이그레이션 수행
2) dblink로 다른 데이터베이스에 직접 붙어, 데이터를 가져오는 방식
그중에 먼저, exp/imp 방식을 알아보자
먼저, 오라클 10g 이전에 exp/imp 방식과 expdp/impdp ( data pump ) 방식으로 나뉜다.
두 방식은 서로 호환되지 않으며,
차이점으로는 1. 속도 및 작업방식 2. 병렬수행 3. Job Control 4. 소요시간 예측 등이 있다.
- 속도
가장 큰 차이는 속도로, 기존 exp/imp의 single stream data unload 방식보다
direct path method 방식을 사용하여, 15~45배 정도 빠르다.
direct path method
- direct I/O를 통하여 OS 메모리를 쓰지않고, 데이터파일에 직접 작성하는 방식
※ [ Direct-path 가 되지 않는 경우 ]
- 클러스터 테이블인 경우
- 테이블에 활성화된 트리거가 존재할 경우
- 글로벌 인덱스를 가진 테이블이 하나의 파티션에 존재 할 경우
- LOB컬럼에 있는 도메인 인덱스
- insert 모드에서 fine_grained access control 이 enable인 경우
- BFILE을 가진 테이블인 경우
- 작업방식 ( 병렬수행 가능 )
또한, data pump는 Oracle Directory를 통해 OS 물리경로로 접근하기 때문에
Oracle Directory를 매핑해주어야한다.
exprot ( 기존 ) : exp 계정/패스워드 file=덤프파일위치
export ( datapump )
- OS 물리경로 확인 : mkdir /data/pump
- Oracle 디렉토리 지정 : reate directory pump_dir AS '/data/pump';
- DBMS 계정에 디렉토리 권한 부여 : grant read,write on directory pump_dir to scott;
- export 명령 수행 : expdp 계정/PWD direcotry=pump_dir dumpfile={데이터파일명} logfile={로그파일명}
full/schema/table/tablespace 중에 모드 선택하여 대상 데이터 선택
추가옵션 : filesize : 한 파일당 최대크기 / exclude: 특정 오브젝트 제외 / query : 조건에 맞는 오브젝트만 포함
job_name : job name 설정 / parallel : 병렬수행 프로세스 개수 ( 동일한 데이터파일 개수 필요 )
- Job Control
하기 명령어들을 통해 수행중인 Job의 중단, 재수행, 모니터링등의 Control 가능
add_file: 덤프파일 추가
exit: job 작업에서 빠져나감
parallel: 현재 작업중인 프로세스 개수 조정
status: 현재 작업 상태를 모니터링 하는 갱신 시간 지정
kill_job: 해당 작업 완전히 삭제, 이게 작동 안하면 job_name의 테이블을 drop 해야함
start_job: 중단된 작업 다시 시작
stop_job: 현재 작업 일시 중단
- 데이터 예상시간 조회
SELECT sid, serial#, sofar, totalwork
FROM v$session_longops
WHERE opname='job_name대문자'
AND sofar != totalwork ;
※ Import 시 주의점
1) 버전이 다를경우 import 하는 DB의 버전으로 expdp 시에 version 옵션 넣어줄 것2) 스키마, Table space, table에 대하여 exp/imp 환경이 다르다면 remap_스키마/TBS/table 옵션을 사용하여 명시
출처 :
https://artdap.tistory.com/entry/datapump란 [이제 나의 인생에는 Ctrl+Z 란 없다.]
https://hayleyfish.tistory.com/99 [DB네 생선가게]
'DB > Oracle' 카테고리의 다른 글
데이터 Reorg (2) | 2021.08.03 |
---|---|
마이그레이션 (2) DB Link (1) | 2021.07.06 |