본문 바로가기

DB/오라클

Export / Import 이용한 백업과 복구

Export와 Import는 가장 유용하게 그리고 자주 사용되는 백업관련 DBA ToolKit 입니다.


SQL*Loader는 외부 데이터를 오라클 서버로 업로드 하는 역할을 수행 하지만 Export/Import는 오라클 서버의 데이터를 다른 오라클 서버(이때 플랫폼과는 무관하다. 예를 들어 윈도우용 오라클에서 Export 받은 파일을 Unix/Linux 서버 기반의 오라클로 Import 하는것이 가능하다) 또는 같은 서버의 다른 사용자로 Import 하는 것이 가능 하다.
먼저 Export부터 그 사용법에 대해 알아 보기로 하자.

1. Export
- EXport는 데이터베이스의 논리적인 백업을 제공 한다. 즉 테이블, 데이블스페이스, 데이터를 포함한 사용자, 그리고 사용자가 만든 스키마 오브젝트(Index, View, Synonym, Trigger, DataBase Link, sequence, stored code 등등)등을 백업 받을 수 있는 것이다.

- Export 유틸리티의 Output은 export dump 파일 이다. 이 파일은 import Utility를 통해 읽혀져 다른 데이터베이스등으로 복구 되는 것이다.

- Export 파라미터
  많은 파라미터중 UserID라는 파라미터는 꼭 가져야 한다는 것을 기억 하자. Exp 명령 입력하고  아무 파라미터도 주지 않는 경우 기본(Default) 값을 제공하면서 입력을 위한 프롬프트를 보여준다.(이때 사용자 ID와 ORD)는 반드시 입력해야 한다.

  USERID : username/password를 값으로 입력 한다. 반드시 입력해야 한다. 만약 전체 데이터베이스를 백업 받기 위해 서는 기술된 User는 명시적으로 exportfull database 롤(Role)을 부여 받아야 한다.


 

  FILE :  출력 파일의 이름(Export후 생기는 dump 파일 이름)


 

  ROWS : Export Dump 파일에 테이블 행(데이터) 포함 여부 표시: (Y)es/(N)o 만약 여러분이 테이블 구조만 export하고 실제 row data는 백업을 원하지 않는 경우에는 rows=n 이라고 명시 해야 한다.(default값은 y)


 

  Query : 테이블의 특정 부분만을 Export 하기 위해서 사용 한다.
       (exp userid=scott/tiger tables=emp query=\"where sal \> 2000 \
  ----------------------------------------- 
  Export Mode와 관련된 파라미터

  FULL : DataBase 레벨의 Export를 수행할지 여부를 표시, 전체 데이터베이스 익스포트 여부를 표시: (Y)es/(N)o
            (exp userid=system/manager full=y)


 

  OWNER : Schema Level의 EXport를 수행 할지의 여부를 표시 Export를 원하는 사용자이름을 기술 한다.
               (exp userid=system/manager owner=(scott)
  TABLES : export할 테이블 테이블 리스트 또는 (Y)es/(N)o
                 (exp userid=system/manager tables=(emp, dept, salgrade)
                 (exp userid=system/manager tables=(scott.emp%)
  TABLESPACE : export를 원하는 테이블스페이스(TableSpace)를 기술
               (exp yserid=system/manager tablespaces = (users) )
  -----------------------------------------------------------------------------               
  INDEXES, CONSTRAINTS, GRANTS, TRIGGERS : Index, Constraints, grant, 
                 triggers등을 export할지의 여부를 지정 (Y)es/(N)o, 기본적으로 앞 4개의 스
                 키마 오브젝트는 Export 됨
                 (exp userid=scott/tiger indexes=n constraints=n grants=n triggers=n)
 
  DIRECT : Direct 모드 익스포트 유무 (Y)es/(N)o 
  INCTYPE :  익스포트 레벨 유형
  PARFILE :  파라미터가 명시된 파일의 이름, Export인자들이 많을 경우 별도의 파일로
                  서 관리 가능
  HELP :  대화식 모드에서 익스포트 파라미터 디스플레이 (Y)
  LOG : 로깅 메시지를 위한 파일이름을 기술 한다.
  CONSISTENT : 익스포트 동안 데이터 갱신시 데이터베이스의 읽기 일관성 뷰 제공 
                        유무: (Y)es/(N)o
  BUFFER : 바이트로된 데이터 버퍼 크기: (정수)
  COMPRESS : 하나의 익스텐트(Extent)에 모든 데이터를 포함시킬지 명시, (Y)es/(N)o

  * Direct Path 익스포트 개념
     Direct Path 기능을 사용함으로써 데이터를 훨씬 더 빨리 export할 수 있다. 

   * Direct-Path 익스포트의 구조 
    export시 direct 모드의 사용은 파라미터 DIRECT=Y라고 기술함으로써 설정될 수 있다 
    Direct Path 익스포트는 인스턴스의 다른 자원들과 경쟁하지 않으며 세션에 의해 사용
    되는 private area로 데이터베이스 블록을 읽어 들인다.
    행들은 전송을 위해 Two-Task Command(TTC) 버퍼로 직접 이동되며 이 TTC 버퍼 
    내의 데 이터는 Export의 형식으로 되어 있다. 

    ---------------------------------------------------------------
    Export의 예 1 : exp 라는 명령만 입력 함으로서 대화식으로 export 처리
    ---------------------------------------------------------------
   D:\backup>exp

   Export: Release 9.2.0.1.0 - Production on 일 Jan 11 22:51:41 2004

   Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.


   사용자명: scott
   암    호:

   다음에 접속됨: Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
   With the Partitioning, OLAP and Oracle Data Mining options
   JServer Release 9.2.0.1.0 - Production
   배열 인출 버퍼 크기 입력: 4096 >

   엑스포트 파일: EXPDAT.DMP >

   (2)U(사용자), 또는 (3)T(테이블): (2)U >

   권한부여 엑스포트 (yes/no): yes >

   테이블 데이터 엑스포트 (yes/no): yes >

   확장 영역 압축 (yes/no): yes >

   KO16MSWIN949 문자 설정과 AL16UTF16 NCHAR 문자 설정에서 엑스포트가 종료되
   었습니다

. 스키마 이전 단계의 객체와 작업을 엑스포트합니다\r

. SCOTT 사용자를 위해 외래 함수 라이브러리 이름을 엑스포트합니다
. PUBLIC 유형 동의어 엑스포트 중
. 전용 유형 동의어 엑스포트 중\
. SCOTT 사용자의 객체 유형 정의를 엑스포트 합니다 \r

SCOTT의 객체를 엑스포트하려고 합니다 ...
. 데이터베이스 링크 엑스포트 중
. 순차 번호 엑스포트 중
. 클러스터 정의 엑스포트 중
. SCOTT의 테이블을 엑스포트하려고 합니다 via 규정 경로...
. . 테이블   ADDRBOOK(를)을 엑스포트 중          3 행이 엑스포트됨
. . 테이블   EMP(를)을 엑스포트 중         15 행이 엑스포트됨
......
. 동의어 엑스포트 중
. 뷰 엑스포트 중
. 저장 프로시저 엑스포트 중
. 작업을 엑스포트합니다
. 참조 무결성 제약조건 엑스포트 중
. 트리거 엑스포트 중
. 인덱스유형을 엑스포팅합니다
. 비트맵, 함수, 기능과 확장 가능한 인덱스들을 엑스포트합니다
. 이후 테이블 처리를 엑스포트 중
. 구체화된 뷰 엑스포트 중
. 스냅샷 로그 엑스포트 중
. 작업 대기열을 엑스포트 중
. 리프레쉬 그룹과 자식 엑스포트 중
. 차원을 엑스포트합니다\
. 스키마 이후 단계의 객체와 작업을 엑스포트합니다\r

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

   D:\backup>dir
    D 드라이브의 볼륨: data1
    볼륨 일련 번호: 2434-2E50

    D:\backup 디렉터리

   2004-01-11  11:07p   

          .
   2004-01-11  11:07p              ..
   2004-01-11  11:08p           51,200 EXPDAT.DMP <-- 이름을 안주면 이 이름으로 생성
               1개 파일          51,200 바이트
               2 디렉터리   2,185,789,440 바이트 남음

 


    ---------------------------------------------------------------
    Export의 예 2 : SCOTT 계정의 모든 오브젝트를 Export
    ---------------------------------------------------------------
   D:\backup>exp userid=scott/tiger file=scott.dmp 
   또는    D:\backup>exp userid=system/manager owner=scott file=scott.dmp

Export: Release 9.2.0.1.0 - Production on 일 Jan 11 23:24:38 2004

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.


다음에 접속됨: Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production
KO16MSWIN949 문자 설정과 AL16UTF16 NCHAR 문자 설정에서 엑스포트가 종료되었습니다
\
. 스키마 이전 단계의 객체와 작업을 엑스포트합니다\r

. SCOTT 사용자를 위해 외래 함수 라이브러리 이름을 엑스포트합니다
. PUBLIC 유형 동의어 엑스포트 중
. 전용 유형 동의어 엑스포트 중\
. SCOTT 사용자의 객체 유형 정의를 엑스포트 합니다 \r

SCOTT의 객체를 엑스포트하려고 합니다 ...
. 데이터베이스 링크 엑스포트 중
. 순차 번호 엑스포트 중
. 클러스터 정의 엑스포트 중
. SCOTT의 테이블을 엑스포트하려고 합니다 via 규정 경로...
. . 테이블          ADDRBOOK(를)을 엑스포트 중          3 행이 엑스포트됨
. . 테이블          EMP(를)을 엑스포트 중         15 행이 엑스포트됨
    .......................

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

   D:\backup>dir
    D 드라이브의 볼륨: data1
    볼륨 일련 번호: 2434-2E50

    D:\backup 디렉터리

   2004-01-11  11:24p     

          .
   2004-01-11  11:24p                ..
   2004-01-11  11:08p              51,200 EXPDAT.DMP
   2004-01-11  11:24p              51,200 scott.dmp
                  2개 파일         102,400 바이트
                  2 디렉터리   2,185,736,192 바이트 남음


    

    ---------------------------------------------------------------
    Export의 예 3 : scott 계정의 emp, dept 테이블의 구조만 Export
    ---------------------------------------------------------------
   D:\backup>exp userid=scott/tiger tables=(emp, dept) rows=n file=structure.dmp

Export: Release 9.2.0.1.0 - Production on 일 Jan 11 23:29:15 2004

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.


다음에 접속됨: Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production
KO16MSWIN949 문자 설정과 AL16UTF16 NCHAR 문자 설정에서 엑스포트가 종료되었습니다

경고: 테이블 데이터(행)가 엑스포트 되지 않습니다

지정된 테이블을 엑스포트하려고 합니다 via 규정 경로...
. . 테이블                            EMP(를)을 엑스포트 중
. . 테이블                           DEPT(를)을 엑스포트 중
엑스포트가 경고 없이 정상적으로 종료되었습니다.

D:\backup>dir
D 드라이브의 볼륨: data1
볼륨 일련 번호: 2434-2E50

D:\backup 디렉터리

2004-01-11  11:29p     

          .
2004-01-11  11:29p                ..
2004-01-11  11:24p              51,200 scott.dmp
2004-01-11  11:29p               4,096 structure.dmp  <--------
               3개 파일          59,392 바이트
               2 디렉터리   2,185,781,248 바이트 남음

    ---------------------------------------------------------------
    Export의 예 4 : 전체 데이터베이스 백업
    ---------------------------------------------------------------
    D:\backup>exp userid=system/manager full=y file=full.dmp

    

========================Import =========================================
2. Import
   Import Utility는 Export를 통해 생성된 덤프파일을 읽어 데이터베이스 복구를 진행 
   한다. 

   파라미터

   USERID : Import를 수행 할  객체의 사용자이름/패스워드 
   FILE : 입력 파일 이름. Export를 통해 생성된 파일 
   IGNORE : Import시 테이블이나 인덱스와 같은 스키마 오브젝트는 기본적으로 만들려
                 고 시도한다. 이때 비록 비어있지만 객체가 이미 존재 한다면 존재함으로 인
                 한 생성 에러가 나타나는데 이를 무시한다는 의미 이다.(default n)
   ROWS : Import시 테이블의 Row를 임포트 할것인지의 여부를 지정
               (default y)
   TABLES : 임포트시킬 테이블(default y)
   INDEXES : 임포트시킬 인덱스(default y)
   CONSTRAINTS : Constraint들을 import할 전지의 여부를 표시(default y)
   GRANTS : GRANT들을 임포트 할건지의 여부(default y) 
   INCTYPE : 증분적 임포트 유형 명시. SYSTEM 및 RESTORE 옵션이 있음.
   PARFILE : 파라미터 명시 파일, 파라미터등이 많아 복잡한 경우에 사용 
   HELP :  대화식 모드로 익스포트 파라미터 디스플레이.
   LOG : 로그 파일명 
   INDEXFILE : Index-creation 명령을 수용할 파일 명시.
   ---------------------------------- Import Mode와 관련된 파라미터
   FULL :  전체 데이터베이스를  임포트함. 
   Schema Level에서는 fromuser, touser를 사용한다.   
       DBA이거나 import full database role을 부여 받지 않았다면 import를 수행하는 사용
       자의 스키마에서만 import를 할 수 있다. 이를 해결하기 위해 fromuser, touser를 사
       용 한다.
      - FROMUSER :  임포트시킬 객체를 포함하는 스키마 리스트.
      - TOUSERS : 사용자의 스키마가 임포트될 사용자 리스트 명시. 
   Table level에서는 tables 파라미터를 사용한다.
      - Tables : 기술된 테이블들이 임포트 된다.
    
   예) $imp userid=system/manager full=y
        $imp userid=system/manager fromuser=scott touser=test
        $imp userid=system/manager tables=(scott.emp, scott.dept)
   -----------------------------------------------------------------

   DESTROY : Import 시  Import Utility는 필요하다면 어떠한 테이블 스페이스에 대해 만
                    들 수도 있다. 만약 destroy=y이면 export dump 파일안에 같은 이름을 가
                    진 data file명이 있다면 import되는 오라클 서버에 대해서 그 파일을 
                    overwrite 한다는 것이다. (default는 n이다.)
                    ($imp userid=scott/tiger destroy=y)

 

   =========================================================================
   import 예제 1 : scott 계정을 삭제 후 export 받은 백업본을 이용해 복구하기
   =========================================================================

   ---> 아래는 SQL*Plus에서...  
   SQL> connect / as sysdba
      연결되었습니다.
   SQL> drop user scott cascade;
      사용자가 삭제되었습니다.


   ---> 아래는 명령프롬프트에서...
   D:\backup>dir
D 드라이브의 볼륨: data1
볼륨 일련 번호: 2434-2E50

D:\backup 디렉터리

2004-01-11  11:33p     

          .
2004-01-11  11:33p                ..
2004-01-11  11:28p               4,096 EXPDAT.DMP
2004-01-11  11:36p             548,864 full.dmp
2004-01-11  11:24p              51,200 scott.dmp
2004-01-11  11:29p               4,096 structure.dmp
               4개 파일         608,256 바이트
               2 디렉터리   2,185,232,384 바이트 남음

D:\backup>imp userid=system/manager fromuser=scott touser=scott file=scott.dmp

Import: Release 9.2.0.1.0 - Production on 월 Jan 12 00:20:59 2004

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.


다음에 접속됨: Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production

엑스포트 파일은 규정 경로를 거쳐 EXPORT:V09.02.00 에 의해 생성되었습니다

경고: 객체는 다른 사용자 SCOTT(이)가 엑스포트한 것입니다.

KO16MSWIN949 문자집합과 AL16UTF16 NCHAR 문자 집합에 임포트가 완성되었습니다
. SCOTT 객체를 SCOTT(으)로 임포트하는 중입니다
IMP-00003: ORACLE 오류 1435 가 발생했습니다
ORA-01435: 사용자가 존재하지 않습니다
경고와 함께 임포트가 정상 종료되었습니다.


---> 다음은 SQL*Plus에서...
SQL> create user scott identified by tiger
  2  default tablespace users
  3  temporary tablespace temp
  4  quota 100m on users;

사용자가 생성되었습니다.

SQL> grant connect, resource to scott;
권한이 부여되었습니다.

SQL> connect scott./tiger;
연결되었습니다.

SQL> select * from tab;
선택된 레코드가 없습니다.


---> 다음은 명령 프롬프트에서...
 
D:\backup>imp userid=system/manager fromuser=scott touser=scott file=scott.dmp

Import: Release 9.2.0.1.0 - Production on 월 Jan 12 00:33:32 2004

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.


다음에 접속됨: Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production

엑스포트 파일은 규정 경로를 거쳐 EXPORT:V09.02.00 에 의해 생성되었습니다

경고: 객체는 다른 사용자 SCOTT(이)가 엑스포트한 것입니다.

KO16MSWIN949 문자집합과 AL16UTF16 NCHAR 문자 집합에 임포트가 완성되었습니다
. SCOTT 객체를 SCOTT(으)로 임포트하는 중입니다
. . 테이블     "ADDRBOOK"(를)을 임포트 중          3 행이 임포트되었습니다.
  . 테이블     "EMP"(를)을 임포트 중                   15행이 임포트되었습니다.
  ............
  ............
  임포트가 경고 없이 정상적으로 종료되었습니다.


  SQL>  select * from tab;

TNAME                          TABTYPE  CLUSTERID
------------------------------ ------- ----------
ADDRBOOK                       TABLE
BONUS                             TABLE
CUSTOMER                      TABLE
CUSTOMER1                     TABLE
CUSTOMER2                     TABLE
DEPT                                TABLE
EMP                                 TABLE
EMPLOYEE                       TABLE
EMP_HISTORY                  TABLE
KOR                                 TABLE
LONGTEST                       TABLE

TNAME                          TABTYPE  CLUSTERID
------------------------------ ------- ----------
MYDEPT                        TABLE
MYEMP                         TABLE
MYTABLE                      TABLE
SALES                           TABLE
SALGRADE                     TABLE
SAWON                          TABLE
S_CUSTOMER                 TABLE
S_DEPT                          TABLE
S_EMP                           TABLE
S_IMAGE                        TABLE
S_INVENTORY                 TABLE

TNAME                          TABTYPE  CLUSTERID
------------------------------ ------- ----------
S_ITEM                         TABLE
S_LONGTEXT                 TABLE
S_ORD                          TABLE
S_PRODUCT                  TABLE
S_REGION                      TABLE
S_TITLE                         TABLE
S_WAREHOUSE              TABLE
TEST                             TABLE
TIME_TAB                      TABLE

31 개의 행이 선택되었습니다.
  

  =========================================================================
   import 예제 2 : emp Table을 삭제 후 백업본을 이용해 복구하기       
  =========================================================================
  
  --> SQL*Plus에서 ...
  SQL> connect scott/tiger
연결되었습니다.
SQL> drop table emp;
drop table emp
           *
1행에 오류:
ORA-02449: 외래 키에 의해서 참조된 테이블에 유일/기본 키입니다

SQL> drop table emp cascade constraint;
테이블이 삭제되었습니다.

SQL> select count(*) from emp;
select count(*) from emp
                     *
1행에 오류:
ORA-00942: 테이블 또는 뷰가 존재하지 않습니다

 

  --> 명령프롬프트에서 실행

  D:\backup>imp scott/tiger tables=(emp) file=scott.dmp <-- scott으로 export 받은 경우에...
D:\backup>imp userid=system/manager tables=(emp) file=scott.dmp fromuser=system
touser=scott  <-- system으로 export 받은 경우에...

Import: Release 9.2.0.1.0 - Production on 월 Jan 12 00:43:45 2004

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.


다음에 접속됨: Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production

엑스포트 파일은 규정 경로를 거쳐 EXPORT:V09.02.00 에 의해 생성되었습니다
KO16MSWIN949 문자집합과 AL16UTF16 NCHAR 문자 집합에 임포트가 완성되었습니다
. SCOTT 객체를 SCOTT(으)로 임포트하는 중입니다
. . 테이블                          "EMP"(를)을 임포트 중         15 행이 임포트
되었습니다
사용 가능한 제약 조건에 관해서...
임포트가 경고 없이 정상적으로 종료되었습니다.

--> SQL*Plus에서 실행
  

SQL> select count(*) from emp;

  COUNT(*)
----------
        15

 

 

@출처 : www.오라클자바.co.kr