본문 바로가기

오라클 백업/복구

IMPORT



Export/Import

특정 테이블만 백업, 복구를 원할 때, Migration 시 오라클 버전, 플랫폼이 서로 다를 때 사용하는 

논리적인 백업 툴 = EXPORT / 복구 툴 = IMPORT



두 작업 모두 DB가 켜져있을 때만 가능 

오라클 버전이 달라고 데이터 이동 가능하기때문에 이식성 아주 좋음!

export/import 작업은 temporary tablespace 공간을 사용하기 때문에 

temporary tablespace가 없거나, 사이즈가 작다거나 등 문제가 있으면

'Temporary tablespace empty' 라는 에러가 발생되면서 작업 중단됨

없으면 미리 만들고 등록해주고, 사이즈가 너무 작다 싶으면 리사이징 해주기




Import

- export 수행해서 만든 파일을 다시 데이터베이스로 넣는 작업

- export 유틸리티가 변환한 바이너리 파일을 import 유틸리티가 읽어서 다시 데이터베이스에 저장

- 순서는 대략 create table -> insert -> 인덱스 생성 -> add constarints 

- 반드시 DBA로 export 했으면 DBA로 import 해야 함

   계정을 알 수 없다면 .dmp 파일을 vi 에디터로 열어보면 첫줄or2nd줄에 U 다음에 나오는 것이 계정

   scott으로 exp 하고 system으로 imp 가능 

- import 과정은 DDL과 DML을 수행하는 것이므로, Redo Log와 Undo Segment를 사용

  대량의 데이터를 import 할때는 반드시 큰 undo tablespace 준비해서 작업,

  undo 용량이 부족할 경우 마지막에 에러나면서 전부 rollback 될수도 있음

  이런 위험을 줄이기 위해서 import 할때 commit=y 옵셔을 추가하면 array 단위로 commit을 수행해 전체가 rollback되는것을 막을 수 있음

- AS-IS(구DB)에 있던 데이터와 TO-BE(신DB)에 있던 데이터가 동일해 충돌이 일어나서 다음 작업이 진행이 안되는 경우도 있음

  이걸 막기 위해서 ignore=y 옵션 사용,

  import단계에서 하나가 에러가면 그 다음것들은 작업이 아예 시작되지 않음, 

  다시 import하려면 에러나기 전 작업들을 싹 지우고 다시 import 재시작

- 인덱스 많은 테이블 import시 기존 인덱스 지우고 import 후 인덱스 재생성하는 것이 좋다

- import는 다른 작업이나 사용자가 별로 없을 때 (주로 밤시간)나, 막아놓고 작업해야 함




옵션

$ imp 옵션


export 옵션과 동일

더 추가되는 옵션들은


 옵션명

 Default Value 

 의미

 show

 NO

 데이터를 import하지 않고 내용만 확인 

 ignore

 YES

 impore 중 에러나도 무시하고 계속 진행 

 fromuser

 없음 

 export 할 당시 오브젝트 소유자를 지정 

 touser

 없음  

 import할 오브젝트의 새 owner 이름 지정

 commit

 NO

 각 array 입력 후 commit 할 것인가 결정

 array는 한번 입력되는 단위를 의미

 테이블 전체가 입력 완료된 후 커밋하는게 기본값




1. DBA로 전체 데이터 import

full=y 


예) 

$ imp system/oracle file=/data2/export/full01.dmp full=y ignore=y 


TO-BE에 AS-IS와 같은 테이블이나 데이터가 존재한다면 추가하게 됨

만약 TO-BE에 제약조건이나 인덱스가 존재한다면, unique index나 primary key 등이 존재할 경우 

데이터가 추가되지 않고 에러 발생




2. 특정 사용자의 데이터만 import

fromuser=사용자

tables=테이블명


전체 export 받은 파일에서 scott.test01 테이블만 import

예)

$ imp system/oracle file=/data2/export/full01.dmp fromuser=scott tables=test01 ignore=y 




3. SCOTT 사용자의 test02 테이블을 HR 사용자 소유로 변경

fromuser=사용자

touser=사용자

tables=테이블명


예) 

$ imp system/oracle file=/data2/export/test02.dmp fromuser=scott touser=hr ignore=y


[작업내용]




4. 실제 데이터는 import 하지 않고 DDL 문장만 추출 = 껍데기만 만드는 법

show=y


DDL = CREATE, ALTER, DROP, TRUNCATE

기본값은 no라서 show=y로 옵션 추가하면, 

export 파일의 모든 내용들이 보여지는데 log 옵션을 더 추가하게 되면 그 내용들이 전부 로그파일에 저장됨

그 후에 로그 파일을 편집하면 된다.


예) 

$ imp system/oracle file=/data2/export/test02.dmp full=y show=y log=test02.log


[작업내용]




5. import 할 때 테이블과 index 분리하기

오라클 권장사항 = 테이블과 인덱스는 서로 다른 테이블스페이스에 저장 -> 성능 UP!

이렇지 못하는 경우가 많아 export 후 import 할때 같은 테이블스페이스에 있던 테이블과 인덱스를

다른 테이블스페이스로 분리할 때 사용


만약 인덱스 생성 스크립트가 있다면 import 할때 indexes=n 옵션 추가후 import

이런다음 나중에 인덱스 스크립트를 수정해 생성될 테이블스페이스를 변경하고 실행하면 인덱스 분리 가능


하지만 인덱스 생성 스크립트가 없다면

import 할 때 indexfile 옵션을 사용해 인덱스 생성 스크립트를 만들어준다

이 스크립트는 테입르 생성 스크립트까지 같이 포함되어 있음, REM으로 주석처리 되어있음, 필요하면 주석 삭제 후 사용


예)

$ import system/oracle file=/data2/export/testindex.dmp full=y indexfile=testindex.sql


[작업내용]








'오라클 백업/복구' 카테고리의 다른 글

Clone DB를 이용한 무정지 상태에서의 응급 복구  (0) 2013.02.07
Datapump  (1) 2013.02.06
EXPORT  (0) 2013.02.04
Redo Log File 장애 복구  (0) 2013.02.04
Log Miner  (0) 2013.01.31