Datapump
Oracle 10g 이상부터 가능한 export/import의 향상된 유틸리티
Export와 Datapump 비교
Export |
Datapump |
|
속도 |
진짜 느림 |
고속 (20배) |
시간예측 |
시간예측 안됨 |
거의 예측 가능 |
이어받기 |
이어받기 불가능 |
이어받기 가능 |
병렬받기 |
불가능 |
데이터가 클 때 병렬받기로 속도UP! |
Datapump 장점
- 작업 관리의 편의성
작업을 일시 중단 시켰다가 다시 시작하는, JOB의 제어가 가능
- 필요한 디스크 공간의 예측
exp/imp 작업도중 디스크 공간 부족으로 작업하던거 취소하고 용량 확보 후 다시 작업 수행해야하지만
datapump는 ESTIMATE 파라미터를 사용해 해당 작업시 필요한 디스크 공간을 미리 알 수 있음
- remapping 기능 지원
스키마 변경이나 테이블 스페이스, 데이터파일 변경까지 가능
expdp 실행 모드
1. Full 모드
full 파라미터를 사용해 데이터베이스 전체를 export 받을 수 있음
하지만 DBA 권한이어야 가능, export_full_database 권한을 가지고 있어야 수행 가능
2. schema 모드
export에서의 owner 파라미터랑 같은
schemas 파라미터를 사용하여 특정 스키마 전체를 export 받음
3. Tablespace 모드
tablespaces 파라미터를 사용해 해당 테이블스페이스에 속한 모든 테이블 받을 수있음
transport_tablespace 파라미터를 사용하면 테이블, 테이블스페이스의 메타 데이터까지 export해
다른 서버로 테이블스페이스 전체를 이동시킬때 아주 유용함 (단, 양쪽 OS, Block size, characterset이 동일해야함)
4. Table 모드
tables 파라미터를 사용, 여러개의 테이블 export도 가능
expdp 파라미터
Parameter |
의미 |
directory | 백업받는 디렉토리 이름지정 (오라클에서생성한 directory), 경로는 쓰지 않음 |
dumpfile | 파일 시스템에 저장될 덤프파일의 이름 지정, 역시 경로는 쓰지 않음 파일이 여러개로 나누어질때 %U를 사용해 자동으로 증가(01~99) |
filesize |
expdp 받을 때 한 개 파일의 최대 크기 |
parfile |
각종 파라미터들을 파일에 저장해놓고 expdp 작업할 때 참조해서 사용 |
logfile/nologfile |
expdp 작업 내용 저장할 로그파일 지정, 지정하고 싶지 않으면 nologfile |
exclude | 원하는 오브젝트만 선택해서 작업, exclude=object_name:조건 예) exclude=table:"\='EMP'" --> EMP테이블만 제외 exclude=table:\"IN\(\'EMP\',\'DEPT\'\)\" --> emp,dept 테이블 제외 |
query | 특정 조건에 맞는 데이터만 expdp 예) query=emp:\"'where sal>1000'\" query=emp:\"where sal\>1000 and job=\'CLERK\'\" |
job_name | expdp 작업을 수행할 때 해당 job에 이름 설정, 설정안하면 자동으로 설정하지만 찾기 어려움 |
parallel |
프로세스를 몇개 사용할 것인가를 지정, 속도 upup! |
attatch | 일시 중당된 작업에 다시 접속할 때 사용 add_file: 덤프파일 추가 exit: job 작업에서 빠져나감 parallel: 현재 작업중인 프로세스 개수 조정 status: 현재 작업 상태를 모니터링 하는 갱신 시간 지정 kill_job: 해당 작업 완전히 삭제, 이게 작동 안하면 job_name의 테이블을 drop 해야함 start_job: 중단된 작업 다시 시작 stop_job: 현재 작업 일시 중단 |
impdp 파라미터
Parameter | 의미 |
include | 원하는 오브젝트만 선택해서 작업, include=object_name:조건 예) include=table:\"\=\'emp\'\" --> EMP테이블만 impdp include=table:\"\in\(\'EMP\',\'DEPT\'\)\" --> emp,dept만 impdp |
exclude | 특정 테이블만 빼고 전부다 impdp할 때 사용, 방법은 include와 동일 |
table_exists_action | impdp에만 있는 옵션 동일한 이름의 테이블이 존재할 때 테이블의 데이터를 어떻게 할 것이 지정 skip: 같은 테이블을 만나면 건너뛰고, 다음 테이블 impdp append: 같은 테이블이 있으면 기존 내용에 데이터 추가 = 기본값 truncate: 기존테이블 truncate하고 새로 impdp drop: 기존테이블 drop 테이블 새로 만들어서 새로운 내용 impdp |
remap_schema | import에서의 fromuser, touser와 동일한 개념 예) remap_schema=scott:hr --> scott으로 받은 테이블을 hr로 impdp |
remap_tablespace | 기존 테이블스페이스에서 다른테이블스페이스로 테이블을 impdp 시킬 때 예) remap_tablespace='users':'example' |
Datapump 작업 관리 및 모니터링
현재 작업중인 datapump 작업들의 내용을 dba_datapump_jobs 딕셔너리를 통해 확인 가능
SELECT owner_name, job_name, operation, job_mode, state
FROM dba_datapump_jobs ;
Datapump 작업 예상 시간 조회
Datapump 사용 전 환경설정
datapump는 오라클에 directory라는 객체를 통해서 간접적으로 OS파일에 접근
그래서 datapump를 사용하려면 미리 directory가 만들어져 있어야하고 접근 할 수 있는 권한이 필요
예)
$ mkdir /data/datapump
$ sqlplus / as sysdba ;
> create or replace directory datapump as '/data/datapump' ;
> grant read, write on directory datapump to scott ; --> scott에게 datapump 디렉토리에 접근할 수 있는 권한 설정
1. scott 계정의 emp, dept 테이블 백업
tables=테이블명
예)
$ expdp scott/tiger directory=datapump dumpfile=emp_dept job_name=t1 tables=emp, dept
작업내용 보면
. . exported "SCOTT"."DEPT" 5.937 KB 4 rows
. . exported "SCOTT"."EMP" 8.617 KB 16 rows
옵션 준대로 scoot의 dept와 emp만 export 되는것을 볼수있음
[작업내용]
2. scott schema 전부 백업
schemas=
export에서 owner 옵션이랑 똑같음
예)
$ expdp scott/tiger directory=datapump dumpfile=scott01.dmp schemas=scott
작업내용보면
Starting "SCOTT"."SYS_EXPORT_SCHEMA_01":
[작업내용]
3. DB 전체를 백업받기
full=y
예)
$ expdp system/oracle directory=datapump dumpfile=full01.dmp job_name=a full=y
4. 일시 중단 후 다시 작업
expdp 수행하다보면 서버에 부하를 많이 주기 때문에 일시 중단했다가 나중에 다시 이어서 작업할 때가 있음
예)
$ expdp system/oracle directory=datapump dumpfile=full02.dmp job_name=a full=y
이 작업중 도중에 컨트롤 c
Export> status --> 현재 작업 상태를 모니터링 하는 갱신시간 지정
Export> stop_job --> 현재 작업 일시 중단
일시 중단한 작업 다시 접속 하려면 attach=작업이름 사용
$ expdp system/oracle attach=system.a
Export> start_job --> 중단된 작업 다시 시작
Export> exit
작업이 되고있는지 조회 가능
$ sqlplus / as sysdba
> select owner_name, job_name, operation, job_mode, state from dba_datapump_jobs ;
조회했을 때 STATE=EXECUTING 이 나온다. 작업중이라는 얘기
작업이 끝나면 다시 조회했을 때 no rows selected 나옴
해당 작업을 완전히 취소하고 싶으면
Export> kill_job
[작업내용]
5. 비정상적으로 종료된 job 취소
다시 접속을 시도하지만 접속이 안되는 에러가 발생
예)
ORA-39002: invalid operation
ORA-39000: bad dump file specification
ORA-31640: unable to open dump file "/data/dp1/full01.dmp" for read
ORA-27037: unable to obtain file status
Linux Error: 2: No such file or directory
Additional information: 3
위 문제의 정보를 가진 마스터 테이블을 확인한 후 drop table 명령어로 마스터 테이블 삭제해주면 job 삭제 됨
예)
1 select o.status, o.object_id, o.object_type,
2 o.owner||'.'||object_name "OWNER.OBJECT"
3 from dba_objects o, dba_datapump_jobs j
4 where o.owner=j.owner_name
5 and o.object_name=j.job_name
6 and j.job_name not like 'BIN$%'
7* order by 4,2
> drop table system.db1 ;
[작업내용]
6. 여러 사용자의 테이블 한꺼번에 expdp 받기
tables= 옵션, 콤마로 이어서 써줌
유저.테이블명 쓰면 된다.
예)
$ expdp system/oracle directory=datapump dumpfile=scott16.dmp tables=scott.emp, hr.employees
but 10g는 에러 발생! 따로따로 해줘야함
[작업내용]
7. 병렬 expdp + impdp 작업
parallel=n
dumpfile=n개만큼
fillsize=
주의! parallel 지정할 개수만큼 미리 데이터파일 만들어줘야함
그리고 병렬로 작업하다보면 temp tablespace 에러가 뜰 수 있는데 사이즈 늘려주기
예)
> create directory datadir1 as '/data/datadir1' ;
> create directory datadir2 as '/data/datadir2' ;
> create directory datadir3 as '/data/datadir3' ;
> create directory datadir4 as '/data/datadir4' ;
$ expdp system/oracle full=y parallel=4 \
> dumpfile=datadir1:full1%U.dat, \
> datadir2:full2%U.dat, \
> datadir3:full3%U.dat, \
> datadir4:full4%U.dat, \
> filesize=100M
프로세스 몇개 쓰고있는지 확인하려면 $ top 명령어로 가능
[작업내용]
imp작업은 exp 작업과 동일
예)
$ impdp system/manager parallel=4 \
> dumpfile=datadir1:full1%U.dat, \
> datadir2:full2%U.dat, \
> datadir3:full3%U.dat, \
> datadir4:full4%U.dat, \
> table_exists_action=append
8. 파라미터 파일 사용하기 - 여러개 파일로 분할 expdp + 특정 테이블 impdp 작업
parfile=
예)
$ vi expdp_pump.par
userid=system/oracle
directory=datapump
job_name=datapump
full=y
dumpfile= expdp_%U.dmp
filesize=100M
$ expdp parfile=expdp_pump.par
예)
$ vi impdp_pump.par
userid=scott/tiger
directory=datapump
job_name=datapump
dumpfile=expdp_%U.dmp
tables=TT700
table_exists_action=append
'오라클 백업/복구' 카테고리의 다른 글
SQL Loader (0) | 2013.02.11 |
---|---|
Clone DB를 이용한 무정지 상태에서의 응급 복구 (0) | 2013.02.07 |
IMPORT (0) | 2013.02.05 |
EXPORT (0) | 2013.02.04 |
Redo Log File 장애 복구 (0) | 2013.02.04 |