Database/Oracle2013. 9. 3. 10:28

Import 툴(imp, impdp)에 의한 논리적 복구


논리적 복구인 임포트(import)는 논리적 백업인 익스포트된 덤프 파일로부터 객체 정의와 테이블 데이터를 읽어서 데이터 객체를 오라클 데이터베이스에 삽입한다.
익스포트 덤프파일은 오라클 임포트에 의해서만 읽을 수 있고, 임포트 유틸리티의 버전이 덤프 파일을 생성하기 위해 사용된 익스포트 유틸리티 버전보다 낮은 경우에는 읽어 올 수 없다.


테이블 객체 임포트하기

테이블 객체를 익스포트 유틸리티를 사용하여 익스포트하여 생성된 익스포트 파일은 다음과 같은 순서로 객체를 포함한다.

	1) 타입정의
	2) 테이블 정의
	3) 테이블 데이터
	4) 테이블 인덱스
	5) 무결성 제약조건, 뷰, 프로시져와 트리거
	6) 비트맵 인덱스, 함수기반 인덱스와 도메인 인덱스

따라서 먼저 새로운 테이블이 생성되고, 데이터가 임포트 된 다음 인덱스가 생성된다. 그 다음에 트리거가 임포트되고, 무결성 제약조건이 생성된 테이블에 활성화된다. 그런 다음 비트맵 인덱스, 함수기반 인덱스와 도메인 인덱스가 생성된다. 이러한 순서는 테이블이 임포트되는 순서에 의해 에러가 발생하지 않도록 하기 위해서이다.

익스포트와 마찬가지로 임포트 유틸리티를 사용하기 전에 catexp.sql이나 catalog.sql 스크립트를 실행하고, 임포트할 권한을 가져야 한다.

임포트하려면 CREATE SESSION 권한을 가져야 하는데, 이 권한은 CONNECT 롤에 포함되어 있고, 자신의 스키마에 객체를 임포트하기 위해서 필요한 권한은 RESOURCE 롤에 포함되어 있다. 사용자가 익스포트한 파일이 아니고 다른 사용자가 익스포트한 파일을 임포트하려면 IMP_FULL_DATBASE 롤을 가지고 있어야 한다.


임포트 실행하기

임포트를 실행하는 방법은 다음과 같은 세가지 방법이 가능하다.
1) 명령행에서 실행하기
명령어 행에서 임포트를 실행하기 위한 명령문은 다음 두가지 모두 가능하다.

IMP username/password PARAMETER=값

IMP username/password PARAMETER=(값1,값2,...)

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 file=expdat.dmp tables=emp Import: Release 11.1.0.6.0 - Production on Sun Jun 7 12:18:59 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 file created by EXPORT:V11.01.00 via conventional path import done in KO16KSC5601 character set and AL16UTF16 NCHAR character set import server uses KO16MSWIN949 character set (possible charset conversion) . importing SCOTT's objects into SCOTT . importing SCOTT's objects into SCOTT . . importing table "EMP" 14 rows imported Import terminated successfully without warnings. $

【예제】☜ $ 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


Posted by 아로나