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 <DIR> .
2004-01-11 11:07p <DIR> ..
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 <DIR> .
2004-01-11 11:24p <DIR> ..
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 <DIR> .
2004-01-11 11:29p <DIR> ..
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
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 <DIR> .
2004-01-11 11:33p <DIR> ..
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