원문 : http://www.ischo.net -- 조인상 //시스템 엔지니어

+++++++++++++++++++++++++++++++++++++++++++++++++++++++

불완전복구에 해당하지만, 그래도 대형DB가 아닌 이상 exp 는 훌륭한 백업도구중의 하나이다.

 

complete recovery 에 해당하는 online-backup에서 제공하지 못하는 부분을 해결해 줄 수 있기 때문이다.

 

 

exp 유틸리티의 사용법은 다음과 같다.  (exp help=y  해서 볼수 있다)

 Export: Release 8.1.7.4.0 - Production on 수 Sep 15 09:00:52 2010

(c) Copyright 2000 Oracle Corporation.  All rights reserved.

 

EXP 명령어 뒤에 사용자명/암호를 입력하면 엑스포트할때 매개변수의
값을 입력하도록 할 수 있습니다:

     예: EXP SCOTT/TIGER

또는, EXP 명령어 뒤에 다양한 인수를 입력하여 엑스포트의 실행 방법을
제어할 수 있습니다. 매개변수를 지정하려면 키워드를 사용하십시오:

     형식:  EXP KEYWORD=값 또는 KEYWORD=(값1,값2,...,값N)
     예  : EXP SCOTT/TIGER GRANTS=Y TABLES=(EMP,DEPT,MGR)
               또는 TABLES=(T1:P1,T1:P2), 만일 T1이 분할된 테이블이라면

USERID 명령어 줄에 첫번째 매개변수에 있어야 합니다.

키워드   설명(기본값)                 키워드       설명(기본값)
--------------------------------------------------------------------------
USERID   사용자명/암호                FULL         파일 전체를 엑스포트 (N)
BUFFER   데이터 버퍼의 크기           OWNER        소유 사용자명 목록
FILE     출력 파일 (EXPDAT.DMP)       TABLES       테이블명 목록
COMPRESS 하나의 익스텐트에 임포트 (Y) RECORDLENGTH I/O 레코드의 길이
GRANTS   권한부여 엑스포트 (Y)        INCTYPE      증분 엑스포트 타입
INDEXES  인덱스 엑스포트 (Y)            RECORD       트랙 증분. 엑스포트 (Y)
ROWS     데이터 행 엑스포트 (Y)       PARFILE      매개변수 파일명
CONSTRAINTS 제약조건 엑스포트(Y)      CONSISTENT   교차-테이블 일관성
LOG      화면 출력의 로그 파일        STATISTICS   객체 분석 (ESTIMATE)
DIRECT   직접 경로 (N)                TRIGGERS     트리거 엑스포트 (Y)
FEEDBACK x 행마다 진행을 보여줍니다 (0)
FILESIZE 각 덤프 파일의 최대 크기
QUERY    테이블의 서브집합을 엑스포트하기 위해 사용될 절을 선택합니다
VOLSIZE  각 태이프 볼륨으로 기록하기 위한 바이트의 수

이동가능한 테이블스페이스에 이와 같은 키워드만이 적용됩니다
TRANSPORT_TABLESPACE 이동가능한 테이블스페이스 메타데이터을 엑스포트합니다 (N)
TABLESPACES 이동하기 위한 테이블스페이스의 목록입니다

엑스포트가 경고 없이 정상적으로 종료되었습니다.

 

 

 

 

예) 한개의 데이터베이스 인스턴스에 다음과 같은 데이터가 있다고 보자.

인스턴스 : ORCL

유저 : user01, user02, user03, user04

각 4개의 유저  user01~user04 에 각각의 데이터가 있고 이를 백업하려면........................

 

 

 

두가지 방법이 있다.

1) 각 유저별로 백업한다.

2) 전체유저를 한번에 백업한다.

 

 

 

1) 각 유저별로 백업한다.

파일이 각 유저별로 4개가 생성되며 4개의 파일을 모두 관리해야 하는 단점이 생긴다.

각 유저들의 패스워드를 모두 알아야 한다.

exp user01/passwd file=user01.dmp log=user01.log

exp user02/passwd file=user02.dmp log=user02.log

exp user03/passwd file=user03.dmp log=user03.log

exp user04/passwd file=user04.dmp log=user04.log

 

 

2) 전체유저를 한번에 백업한다.

파일이 1개가 생성되며 1개의 파일안에 모든 유저가 존재한다.

많이 사용되는 유용한 방법이다. 각 user01~04의 패스워드를 모두 모르더라도 관리자는 system의 패스워드만 알면

모든 유저들의 데이터를 백업할 수 있다.

 

그렇다면 옵션을 보자. 1번의 예처럼

exp system/passwd file=full.dmp log=full..log           

라고 쓰면 안될까?   ------------> 안된다.

이 경우 system 유저의 데이터만 백업하며 (보통은 실데이터가 들어있지 않다)  user01~04의 데이터는 백업하지 않는다.

전체 데이터를 백업하기 위해서는 full=y 옵션을 반드시 사용해야 한다.  full 이란 전체데이터를 의미한다.

exp system/passwd file=full.dmp log=full..log  full=y

 

 

* sysdba권한으로 백업해야 할 경우

EXP-00079 등의 에러가 날 경우 system 권한으로 부족할 수도 있고,

system패스워드를 모르고, 함부로 바꿀수도 없는 경우에 사용할 수 있다.

exp \"sys/passwd as sysdba\" file=full.dmp log=full.log full=y

 

 

* 백업 속도를 높이고자 하는 경우

export 의 속도를 높이고자 할 때는 Direct Path Export를 사용하거나 충분한 버퍼의 값을 주는 방법을 쓸수 있다.

exp system/passwd file=full.dmp log=full..log  full=y dircet=y

exp system/passwd file=full.dmp log=full..log  full=y buffer=4096000

 

 

 

 

 

백업을 했으면 복구를~~~

exp 유틸리티로 백업한 것은 imp 유틸리티로 복구를 한다.  이때 아카이브로그는 사용되지 않고 무용지물이다.

imp 유틸리티로 복구할때의 주의점은

   1. 대상 유저에 이미 존재하고 있을것. (없으면 먼저 만들어야 한다.)

   2. 동일한 테이블이 없을것.

따라서 백업시에 해당 유저를 생성하기 위한 스크립트를 미리 같이 받아두는 것이 좋은 방법이다.

 

imp 유틸리티의 사용법은 다음과 같다. (imp help=y 하면 볼수 있다)

Import: Release 8.1.7.4.0 - Production on 수 Sep 15 09:02:00 2010

(c) Copyright 2000 Oracle Corporation.  All rights reserved.

 

IMP 명령어 뒤에 사용자명/암호를 입력하면 임포트 시에 매개변수의
값을 입력할 수 있도록 프롬프트를 나타나게 할 수 있습니다:

     예 제: IMP SCOTT/TIGER
또는, IMP 명령어 뒤에 여러 가지 인수를 입력하면 임포트의 실행 방법을
제어할 수 있습니다. 매개변수를 지정하려면 키워드를 사용하십시오:

     형식:  IMP KEYWORD=값 또는 KEYWORD=(값1,값2,...,값N)
     예  :  IMP SCOTT/TIGER IGNORE=Y TABLES=(EMP,DEPT) FULL=N
               또는 TABLES=(T1:P1,T1:P2), T1이 분할된 테이블일 경우에

USERID 명령어 줄에 첫번째 매개변수에 있어야 합니다.

키워드      설명(기본값)             키워드          설명(기본값)
--------------------------------------------------------------------------
USERID   사용자명/암호               FULL         파일 전체 임포트 (N)
BUFFER   데이터 버퍼의 크기          FROMUSER     소유 사용자명 목록
FILE     입력 파일들 (EXPDAT.DMP)    TOUSER       사용자명의 목록
SHOW     파일 목차만 목록 (N)        TABLES       테이블명 목록
IGNORE   생성 오류 무시 (N)          RECORDLENGTH IO 레코드의 길이
GRANTS   권한부여 임포트 (Y)         INCTYPE      증분 임포트 유형
INDEXES  인덱스 임포트 (Y)             COMMIT       배열 삽입 커밋 (N)
ROWS     데이터 행 임포트 (Y)        PARFILE      매개변수 파일명
LOG      화면 출력의 로그 파일       CONSTRAINTS  제약조건을 임포트 (Y)
DESTROY  테이블스페이스 데이터 파일에 덮어 쓰기 (N)
INDEXFILE 테이블/인덱스 정보를 지정된 파일로 기록
SKIP_UNUSABLE_INDEXES  사용되지 않은 인덱스들의 유지를 건너뜁니다 (N)
ANALYZE  덤프 파일에 ANALYZE 문을 실행합니다 (Y)
FEEDBACK x 행마다 진행을 보여줍니다(0)
TOID_NOVALIDATE  지정된 유형 ID의 검증을 건너 뜁니다
FILESIZE 각 덤프 파일의 최대 크기
RECALCULATE_STATISTICS 통계를 다시 계산합니다 (N)
VOLSIZE  테이프에 있는 각 파일의 볼륨에 파일의 바이트의 수입니다
이와 같이 키워드만이 이동가능한 테이블스페이스에 적용할 수 있습니다
TRANSPORT_TABLESPACE 이동가능한 테이블스페이스 메타데이터을 임포트합니다 (N)
TABLESPACES 데이터베이스안에 테이블스페이스가 이동되었습니다
DATAFILES 데이터베이스안에 데이터 파일들이 이동되었습니다
TTS_OWNERS 이동가능한 테이블스페이스 설정에 데이터를 소우하고 있는 사용자

임포트가 경고 없이 정상적으로 종료되었습니다.

 

 

 

 

위에서 exp 백업방법을 두가지 알아보았다.

1) 각 유저별로 백업한다.

2) 전체유저를 한번에 백업한다.

이 백업방법에 따른 복구 방법을 알아보자.

 

1) 각 유저별로 백업한다.

백업방법) exp user01/passwd file=user01.dmp log=user01.log

이때의 복구 방법은 다음과 같다.

imp user01/passwd file=user01.dmp log=user01.log

 

만약 A라는 테이블만 복구하려면~

imp user01/passwd file=user01.dmp log=user01.log tables=A

라고 적어주면 된다.

 

 

2) 전체유저를 한번에 백업한다.

백업방법) exp system/passwd file=full.dmp log=full..log  full=y

그런데 이렇게 백업받으면 full.dmp 파일 안에는 user01~user04까지의 데이터가 모두 존재한다.

user01의 데이터를 복구하고자 하는 경우

imp system/passwd file=full.dmp log=full.log fromuser=user01 touser=user01 full=y

라고 적으면 된다.

여기서 fromuser 는 full.dmp 안에 존재하는 유저명.    touser는 대상DB에 존재하는 유저명이다.

 

만약 백업당시의 user01 데이터를  대상DB의  testuser 에 넣고 싶은 경우는

imp system/passwd file=full.dmp log=full.log fromuser=user01 touser=testuser

라고 명령어를 주면 되겠다.

 

 

 

system 패스워드 모르는 경우 sys로 백업받고자 할때

exp \"/ as sysdba\" file=d:\backup\exp\full.dmp log=d:\backup\exp\full.log full=y

 

\ 로 "의 특수문자 의미를 제거해 주면 된다.

 

 

 

(*.95.187.237)