Import 툴(imp, impdp)에 의한 논리적 복구
논리적 복구인 임포트(import)는 논리적 백업인 익스포트된 덤프 파일로부터
객체 정의와 테이블 데이터를 읽어서 데이터 객체를 오라클 데이터베이스에 삽입한다.
익스포트 덤프파일은 오라클 임포트에 의해서만 읽을 수
있고, 임포트 유틸리티의 버전이 덤프 파일을 생성하기 위해 사용된 익스포트 유틸리티 버전보다 낮은 경우에는 읽어 올 수 없다.
테이블 객체 임포트하기
테이블 객체를 익스포트 유틸리티를 사용하여 익스포트하여 생성된 익스포트 파일은 다음과 같은 순서로 객체를 포함한다.
1) 타입정의
2) 테이블 정의
3) 테이블 데이터
4) 테이블 인덱스
5) 무결성 제약조건, 뷰, 프로시져와 트리거
6) 비트맵 인덱스, 함수기반 인덱스와 도메인 인덱스
따라서 먼저 새로운 테이블이 생성되고, 데이터가 임포트 된 다음 인덱스가 생성된다. 그 다음에 트리거가 임포트되고, 무결성 제약조건이 생성된 테이블에 활성화된다. 그런 다음 비트맵 인덱스, 함수기반 인덱스와 도메인 인덱스가 생성된다. 이러한 순서는 테이블이 임포트되는 순서에 의해 에러가 발생하지 않도록 하기 위해서이다.
익스포트와 마찬가지로 임포트 유틸리티를 사용하기 전에 catexp.sql이나 catalog.sql 스크립트를 실행하고, 임포트할 권한을 가져야 한다.
임포트하려면 CREATE SESSION 권한을 가져야 하는데, 이 권한은 CONNECT 롤에 포함되어 있고, 자신의 스키마에 객체를 임포트하기 위해서 필요한 권한은 RESOURCE 롤에 포함되어 있다. 사용자가 익스포트한 파일이 아니고 다른 사용자가 익스포트한 파일을 임포트하려면 IMP_FULL_DATBASE 롤을 가지고 있어야 한다.
임포트 실행하기
임포트를 실행하는 방법은 다음과 같은 세가지 방법이 가능하다.
1) 명령행에서 실행하기
명령어 행에서 임포트를
실행하기 위한 명령문은 다음 두가지 모두 가능하다.
2) 인터렉티브 모드에서 실행하기
임포트를 실행하기 위한 매개변수를 직접 입력하여 실행하는 방법으로 다음과 같은 방법이
사용 가능하다.
입력 | 동작 |
---|---|
imp username/password@instance as sysdba | 임포트 세션 실행 |
imp username/password@instance | 임포트 세션 실행 |
imp username/password as sysdba | 임포트 세션 실행 |
imp username/password | 임포트 세션 실행 |
imp username@instance as sysdba | password입력을 위한 프롬프트 |
imp username@instance | password입력을 위한 프롬프트 |
imp username | password입력을 위한 프롬프트 |
imp username as sysdba | password 입력을 위한 프롬프트 |
imp / as sysdba | password 확인없이 실행 |
imp / | password 확인없이 실행 |
imp /@instance as sysdba | password 확인없이 실행 |
imp /@instance | password 확인없이 실행 |
3) 매개변수 파일을 사용하여 실행하기
매개변수 파일에 매개변수의 값을 저장하고 명령어 행에 PARFILE 옵션을
사용하여 명시하는 방법으로 다음과 같이 사용한다.
imp PARFILE=파일이름 imp username/password PARFILE=파일이름매개변수 파일은 다음 형식중의 하나처럼 작성할 수 있다.
PARAMETER=value PARAMETER=(value) PARAMETER=(value1,value2,...)
• 다음은 Import 유틸리티에서 사용할 수 있는 키워드이다.
키워드 | 의미 |
---|---|
USERID/PASSWORD | 복구할 사용자 id와 암호를 입력 |
BUFFER | 데이터를 읽어올 버퍼의 크기, 0이면 한번에 1행씩 읽음 |
FILE | 운영체제상에 저장된 백업 파일명, 디폴트=expdat.dmp |
SHOW | 실제 복구작업은 하지 않고 백업파일의 내용만 보여줌 |
TABLES | import될 table의 이름 |
INDEXS | index가 포함하여 import함(디폴트=Y) |
ROWS | Y이면 데이터베이스 객체 내의 모든 행을 import함, N이면 임의의 데이터베이스 객에 대한 DDL 정보만 import함(디폴트=Y) |
FROMUSER | import되는 object의 소유자 list |
TOUSER | FROMUSER에 대한 다른 사용자 ID를 정의 |
FULL | Y값은 전체 DB의 import를 설정, 사용을 위해서는 exp_full_database의 role이 있어야 함(디폴트=N) |
COMMIT | • commit의 단위를 결정함 • Y로 설정하면 각 배열이 삽입된 후 commit되도록 지정 • N은 명시적 commit이 아니라 다음 transaction을 create하면 auto-commit되도록 지정 • Y로 설정하면 rollback segment가 과도하게 많아지는 것을 방지함 • 디폴트=N |
GRANTS | import될 때 모든 object에 부여된 role까지도 포함하여 import함 |
PARFILE | 자주 사용하는 import 옵션을 모아서 실행할 때 사용 |
LOG | import 작업시 모든 로그 내용을 지정한 파일에 저장 |
DESTROY | 이미 존재하는 객체를 복구할 때 삭제 후 복구 |
TRANSPORT_TABLESPACE=Y | 데이터베이스 간에 tablespace를 이동시킬 때 사용 |
INDEXFILE | 복구시 사용한 index 관련 문법을 지정한 파일에 저장 |
IGNORE | • Y이면, object 생성에 중복등이 있어 object가 생성되지 않는 error가 발생시 아무런message없이 기존 table로
import함 • N이면, error가 출력되며 이미 존재하는 TABLE은 건너 뜀 • 단, 이 parameter는 object 생성 error만 무시할 수 있고, 다른 여러 error에는 영향을 끼치지 않음(디폴트=N) |
FEEDBACK | 아무런 표현이 없을 시 import 실행 과정이 ....처럼 행의 개수만큼 점으로 표시됨 |
RECORDLENGTH | 입력 record의 크기를 지정해 줌, data가 다른 record 크기를 가진 운영체제로 export된 경우에만 사용함 |
PARLOG | import parameter의 list를 가지고 있는 LOG이름을 지정 |
SHOW | • Y이면, import할 내용의 SQL문이 출력되고 import는 수행되지 않음 • import가 실행할 순서대로 SQL문이 출력됨 • SHOW=Y이면 FROMUSER, TOUSER, FULL, TABLES PARAMETER만 설정될 수 있음 |
HELP | • parameter의 의미를 출력함 • Y로 설정하면 import는 실행되지 않고 도움말이 출력됨 |
parameter 사용시 주의할
사항
-- FULL=Y, OWNER=user, TABLE=schema.TABLE 파라미터는 IMPORT MODE를 지정하는 파라미터이기 때문에
함께 사용될 수 없다.
-- 같은 파라미터 값으로 여러 번 IMPORT를 수행하는 경우 PARAMETER LOG를 만들어서 PARLOG로
명시하여 사용하는 것이 좋다.
import는 다음과 같은 4 가지 모드로 복구 할 수 있다. 물론 데이텁제이스 모드나 테이블스페이스 모드를 사용하려거나 다른 사용자의 테이블이을 사용하려면 당연히 imp_full_database롤이 있어야 한다.
데이터베이스 전체모드 tablespace mode 사용자 모드 테이블 모드오라클 10g 버전부터는 impdp 유틸리티를 사용하여 서버에 data pump import할 수 있도록 하였다.
【예제】 $ imp help=Y
Import: Release 11.1.0.6.0 - Production on Wed Jun 10 12:50:24 2009
Copyright (c) 1982, 2007, Oracle. All rights reserved.
You can let Import prompt you for parameters by entering the IMP
command followed by your username/password:
Example: IMP SCOTT/TIGER
Or, you can control how Import runs by entering the IMP command followed
by various arguments. To specify parameters, you use keywords:
Format: IMP KEYWORD=value or KEYWORD=(value1,value2,...,valueN)
Example: IMP SCOTT/TIGER IGNORE=Y TABLES=(EMP,DEPT) FULL=N
or TABLES=(T1:P1,T1:P2), if T1 is partitioned table
USERID must be the first parameter on the command line.
Keyword Description (Default) Keyword Description (Default)
--------------------------------------------------------------------------
USERID username/password FULL import entire file (N)
BUFFER size of data buffer FROMUSER list of owner usernames
FILE input files (EXPDAT.DMP) TOUSER list of usernames
SHOW just list file contents (N) TABLES list of table names
IGNORE ignore create errors (N) RECORDLENGTH length of IO record
GRANTS import grants (Y) INCTYPE incremental import type
INDEXES import indexes (Y) COMMIT commit array insert (N)
ROWS import data rows (Y) PARFILE parameter filename
LOG log file of screen output CONSTRAINTS import constraints (Y)
DESTROY overwrite tablespace data file (N)
INDEXFILE write table/index info to specified file
SKIP_UNUSABLE_INDEXES skip maintenance of unusable indexes (N)
FEEDBACK display progress every x rows(0)
TOID_NOVALIDATE skip validation of specified type ids
FILESIZE maximum size of each dump file
STATISTICS import precomputed statistics (always)
RESUMABLE suspend when a space related error is encountered(N)
RESUMABLE_NAME text string used to identify resumable statement
RESUMABLE_TIMEOUT wait time for RESUMABLE
COMPILE compile procedures, packages, and functions (Y)
STREAMS_CONFIGURATION import streams general metadata (Y)
STREAMS_INSTANTIATION import streams instantiation metadata (N)
VOLSIZE number of bytes in file on each volume of a file on tape
The following keywords only apply to transportable tablespaces
TRANSPORT_TABLESPACE import transportable tablespace metadata (N)
TABLESPACES tablespaces to be transported into database
DATAFILES datafiles to be transported into database
TTS_OWNERS users that own data in the transportable tablespace set
Import terminated successfully without warnings. |
EXPORT/IMPORT할 때 CHARACTER SET
1) EXPORT
• CONVENTIONAL PATH인 경우에는 USER SESSION에 지정된 CHARACTER SET을 따른다.
• DIRECT PATH인 경우에는 DATABASE CHARACTER SET을 따른다. 만약, USER SESSION과 DATABASE CHARACTER SET이 다른 경우에는 DIRECT PATH로 사용하면 EXPORT작업은 경고 message와 함께 중지된다.
2) IMPORT
• IMPORT되는 SESSION과 DATABASE의 CHARACTER SET이 다르면 먼저 USER
SESSION의 CHARACTER SET으로 변경 시키고 다시 DATABASE CHARACTER SET으로 변경한다.
이는 변경하는데 많은
시간이 걸리며, 또한 일치하는 문자가 없을 경우에는 DATA의 누락이 있을 수 있다.
【예제】☜
exp 과정 | $ exp userid=scott/tiger tables=(scott.emp) Export: Release 11.1.0.6.0 - Production on Thu Jun 4 12:51:01 2009 Copyright (c) 1982, 2007, Oracle. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options Export done in KO16KSC5601 character set and AL16UTF16 NCHAR character set server uses KO16MSWIN949 character set (possible charset conversion) About to export specified tables via Conventional Path ... . . exporting table EMP 14 rows exported EXP-00091: Exporting questionable statistics. "exp_tables.html" 34 행, 1077 문자 Export terminated successfully with warnings. $ |
---|---|
파일확인 | $ ls -l expdat.dmp -rw-r--r-- 1 jijoe junik 7168 6월 4일 12:51 expdat.dmp $ file expdat.dmp expdat.dmp: 데이터 $ |
imp 과정 | 먼저 해당 테이블을 drop한 다음에 |
【예제】☜ $ imp userid=scott/tiger full=y
Import: Release 10.2.0.2.0 - Production on Sun Jun 7 10:32:27 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.2.0 - Production
With the Partitioning, OLAP and Data Mining options
Export file created by EXPORT:V10.02.01 via conventional path
import done in KO16KSC5601 character set and AL16UTF16 NCHAR character set
. importing SCOTT's objects into SCOTT
IMP-00015: following statement failed because the object already exists:
"CREATE TABLE "BONUS" ("ENAME" VARCHAR2(10), "JOB" VARCHAR2(9), "SAL" NUMBER"
", "COMM" NUMBER) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 STORAGE(INI"
"TIAL 65536 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) "
" LOGGING NOCOMPRESS"
IMP-00015: following statement failed because the object already exists:
"CREATE TABLE "DEPT" ("DEPTNO" NUMBER(2, 0), "DNAME" VARCHAR2(14), "LOC" VAR"
"CHAR2(13)) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 STORAGE(INITIAL 6"
"5536 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) "
"LOGGING NOCOMPRESS"
IMP-00015: following statement failed because the object already exists:
"CREATE TABLE "EMP" ("EMPNO" NUMBER(4, 0), "ENAME" VARCHAR2(10), "JOB" VARCH"
"AR2(9), "MGR" NUMBER(4, 0), "HIREDATE" DATE, "SAL" NUMBER(7, 2), "COMM" NUM"
"BER(7, 2), "DEPTNO" NUMBER(2, 0)) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRAN"
"S 255 STORAGE(INITIAL 65536 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAU"
"LT) LOGGING NOCOMPRESS"
IMP-00015: following statement failed because the object already exists:
"CREATE TABLE "SALGRADE" ("GRADE" NUMBER, "LOSAL" NUMBER, "HISAL" NUMBER) P"
"CTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 STORAGE(INITIAL 65536 FREELIST"
"S 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) LOGGING NOCOM"
"PRESS"
Import terminated successfully with warnings. |
자료 사전 정보 조회
v$instance | 현재 운용중인 데이터베이스에 설정된 제한조건에 대한 정보 |
v$database | 현재 데이터베이스의 체크포인트, 아카이브 모드 설정값 |
v$datafile_header | 데이터 파일의 위치와 이름과 헤더 확인 |
v$log | 리두 로그 파일의 시퀀스 번호와 현재 아카이브 상태 확인 |
v$tablespace | 데이터베이스 내의 테이블스페이스의 위치와 이름 확인 |
v$recover_file | 현재 데이터 파일의 온라인 여부 확인 |
v$backup | 데이터 파일의 번호, 현재상태, 시스템 체인지 번호, 데이터 파일의 상태가 변경된 시점 |
v$datafile_header | 데이터 파일의 번호, 현재상태, 생성 시점,저장될 테이블스페이스, 데이터 파일의 위치와 이름 |
출처 : http://radiocom.kunsan.ac.kr/lecture/oracle/backup_restore/imp.html
'Database > Oracle' 카테고리의 다른 글
[펌] SQLException : 결과집합을 모두 소모했음 (0) | 2013.09.27 |
---|---|
[펌] java.sql.SQLException: ORA-01000: 최대 열기 커서 수를 초과했습니다 (0) | 2013.09.27 |
[펌] Oracle 및 MySQL 강좌 사이트 (0) | 2013.09.03 |
[펌] [오라클] as of timestamp - 갱신(업데이트, 삭제)하기 이전의 내용보기 (0) | 2013.08.11 |
trim 혹은 replace 로 제거되지 않는 공백 chr(0) (2) | 2013.08.11 |