오라클 exp tables - olakeul exp tables


DATABASE/Oracle

2014. 6. 29. 11:07

-- DB덤프를 받기 위한 export와 import명령어.

(1) 실서버에서 덤프받기 
-- E:\exp ghost/rhtmxm file=edms.dump log=edms.log OBJECT_CONSISTENT=y rows=y indexes=y grants=y 
[참조 : http://blog.empas.com/adchoi2002/16572605]

(2) 받은 덤프를 내 컴(오라클)에 적용하기
-- D:\Ora_dump>imp ghost/rhtmxm file=edms.dump log=edmsimp.log CONSTRAINTS=y rows=y indexes=y grants=y
[참조 : http://blog.empas.com/adchoi2002/16572605]

-- 테이블 덤프
exp 계정/암호 file=덤프명.dmp compress=y tables=테이블명,테이블명
exp destinyram/wkfyrhks file=tablename.dmp compress=y tables=amdept,amtask, ...
imp system/manager1 fromuser=destinyram touser=jamjeju file=amdept.dmp log=log.log tables=amdept
imp destinyram/wkfyrhks file=NALA_ENFORCE_DOC.dmp log=enforce.log ignore=y grants=y rows=y indexes=y full=y

-- 기본풀덤프
exp destinyram/wkfyrhks@sid -file=2006.dmp -log=2006.log rows=y indexes=y grants=y //남에꺼 빼올때
exp destinyram/wkfyrhks -file=2006.dmp -log=2006.log rows=y indexes=y grants=y //내꺼 빼낼때
imp destinyram/wkfyrhks -file 20051017.DMP -log imp_log.log IGNORE=y grants=y rows=y indexes=y full=y //내꺼에임포트,@붙이면 남에꺼에 임포트
-- 계정풀덤프
exp system/manager file=20060620_oj.dmp owner=destinyram 
imp system/wkfyrhks fromuser=destinyram touser=destinyramSC log=test.log file=20060620_sc.dmp
imp system/manager1 file=20060403.dmp fromuser=navy touser=navy

오라클을 export utility를 사용해서 덤프를 받으면, 그 파일은 텍스트 파일이 아닙니다. binary file이죠.
유닉스라면..
UNIX>strings AAAA.dmp 하시면 텍스트만 볼 수 있습니다.
그렇지만 복구를 하기 위해선 import를 사용하게 되어있는데, 
단순히 export 받은 파일안에 든 text 커맨드만으로 사용할 수는 없겠죠.
export/import는 최소 단위가 테이블입니다.
view, prodecure, synonym 등은 따로 받을 수가 없죠.
최소단위가 테이블임으로 당연히 테이블단위의 복구(import)도 가능합니다.
예를 들어보죠.
prompt>exp system/manager owner=scott tables=emp, employee(컴마로 분리해서 계속 붙일 수 있습니다) file=testexp.dmp
하시면 scott유저의 emp, employee...등의 테이블만 export 받죠.
prompt>imp system/manager fromuser=scott touser=testuser file=testexp.dmp tables=emp
이렇게 하시면, scott유저의 emp 테이블을 testuser에게 import하게됩니다.
export/import에 대한 도움말은...
prompt>exp help=y or imp help=y 하시면 간단한 도움말을 볼 수 있습니다.
조금만 신경써서 읽어보신다면 무슨뜻인지 대강 짐작하시는데 별 문제 없을겁니다.
질문에 답하자면..
오라클에서는 그렇게 이쁘게, 더구나 export를 사용해서는 할 수 없습니다.
아~
다만 한가지..
import를 할 때는 일반적으로 export하는 시간의 두배 이상이 걸립니다.
대부분의 경우는 인덱스 때문입니다.
그래서 import할 때..
prompt>imp system/manager fromuser=scott touser=testuser file=testexp.dmp indexes=n indexfile=indexcreate.sql tables=emp 
뭐 이런식으로 해주면 인덱스는 import를 하지 않고, indexfile=indexcreate.sql에 명기한것처럼 indexcreate.sql이라는 파일로 만들어줍니다.
이 파일은 텍스트입니다.
import가 끝나고 난 다음에 이 스크립트를 돌려주면 인덱스가 생성됩니다.
시간적으로로 이 방법이 더 좋습니다. 

출처 : http://blog.naver.com/genesis0395?Redirect=Log&logNo=120042180932


1. export / import
  가. 여러개의 테이블 중에서 특정 table만 백업/복구 하고자 할 때
  나. 오라클의 버전, 플랫폼이 서로 다른 상황에서의 서버간 데이터 이동 시(migration)

2. export 방식
  가. Conventional Path export : Evaluation Buffer를 사용하는 방식, DB Buffer cache에서 필요데이터를 Evaluation Buffer로 복사 후 데이터를 가공(text -> binary)하여 디스크에 파일로 저장함. export 작업 중에 발생하는 DDL, DML 등의 명령들은 백업파일에 반영되지 않는다.(백업 파일은 Evaluation Buffer을 이용하여 작업하기 때문)

  나. Dircet Path export : DB Buffer Cache에서 데이터를 가공(text -> Binary)하여 디스크에 파일로 저장함, export 명령 이후에 백업대상이 되는 테이블스페이스나 테이블에 Lock이 발생하기 때문에 DDL, DML 작업은 실패 또는 보류 된다.

3. export 옵션 및 사용예제
  가. 옵션
    - userid/passwd : export를 수행하는 계정/패스워드
    - buffer : Evaluation Buffer크기 지정(용량이 클 수록 export 작업이 빨라진다)
    - file : export 결과를 저장할 파일명
    - full : 전체 DB를 export 할 것인가 지정
    - owner : export 받을 사용자 이름지정
    - tables : export 받을 테이블 이름 지정
    - tablespaces : exprot 받을 테이블스페이스 이름지정
    - parfile : export 옵션을 미리 지정한 파라미터 파일지정

  나. 사용예제

exp system/oracle full=y file=/backup/export/test01.dmp

exp system/oracle full=y file=/backup/export/test02.dmp direct=y

exp system/oracle tables=emp \
file=('/backup/export/test03_1.dmp', '/backup/export/test03_2.dmp') filesize=10M

exp system/oracle tablespaces=(example, undotbs1) file=/backup/export/test04.dmp

exp system/oracle file=/backup/export/test05.dmp owner=(scott, hr)

exp system/oracle file=/backup/export/test06.dmp full=y buffer=1024000

vi par_full.dat
file=/backup/export/test07.dmp
full=y
dircet=y

exp system/oracle parfile=par_full.dat

exp scott/tiger query=\"where ename like \'F%\'\" tables=emp \
file=/backup/export/test07.dmp

4. import 옵션 및 사용예제
  가. 옵션(export의 옵션과 유사하다)
    - userid/passwd : import를 수행하는 계정/패스워드
    - buffer : Evaluation Buffer크기 지정(용량이 클 수록 import 작업이 빨라진다)
    - full : export  파일의 모든 데이터를 import 한다.
    - file : import 할 export 파일명 지정
    - show : 데이터를 import 하지 않고 내용만 확인함
    - ignore : import 작업 중 발생할 수 있는 에러를 무시하고 다음단계의 작업을 진행함
    - fromuser : export 할 당시의 object의 소유자 지정
    - touser : import 할 object의 새 소유자 지정
    - tables : import 할 테이블 이름 지정
    - parfile : import 옵션을 미리 지정한 파라미터 파일지정

  나. 사용예정

imp system/oracle file=/backup/export/test01.dmp ignore=y full=y

imp system/oracle file=/backup/export/test02.dmp \ 
fromuser=scott touser=hr ignore=y

imp system/oracle file=/backup/export/test03.dmp full=y show=y log=test03.log

참고 : export/import 계정
import 할 때 사용하는 계정은 export 할 때 사용한 계정이어야 한다. 이 계정이 같지 않으면 import 수행 시 오류가 발생한다.만일 export 계정을 잊었다면 덤프파일을 vi 편집기로 열어 확인할 수 있다.(2번째 줄)
참고 : import 작업 중 에러발생 시
import 작업을 진행하던 도중 에러가 발생해 같은 작업을 반복하게 되면, import 대상이 되는 테이블(제약조건이 없는)에 데이터가 중복 저장될 수 있다. 그러므로 같은 작업을 반복시에는 import 대상이 되는 테이블의 내용을 지우고(drop 또는 truncate) 진행해야 한다.
참고 : SYS 계정으로 생성된 Object export
일반적으로 SYS계정에서 생성된 객체는 export 명령어로 백업할 수 없으므로 주의해야 한다.
(단, 경우에 따라서 system 계정으로 백업이 가능하기도 하다)

4. Import 대상 서버에서 필요한 사전 작업
  가. Export 한 서버와 동일한 Tablespace 생성
  나. 충분한 크기의 Temporary Tablespace 확보
  다. Export 한 서버와 동일한 사용자 생성


참고 : 오라클 레퍼런스 사이트

Export and Import Modes : http://docs.oracle.com/cd/B19306_01/server.102/b14215/exp_imp.htm#i1004890

Export Parameters : http://docs.oracle.com/cd/B19306_01/server.102/b14215/exp_imp.htm#CEGFIAGE

Import Parameters : http://docs.oracle.com/cd/B19306_01/server.102/b14215/exp_imp.htm#i1021478

* export

- 전체 데이터베이스가 export 방법

ex.) C:>exp userid=system/manager file='C:/full.dmp' full=y

- 서비스명 포함

ex.) C:>exp userid=system/manager@서비스명 file='c:/full.dmp' full=y

- exp-00091 불완전한 통계를 엑스포트 중입니다. 메시지 출력시 (oracle 버전 확인과 NLS_LANG가 달라서 발생)

ex.) C:>exp userid=system/manager@서비스명 file='c:/full.dmp' full=y statistics=none

이관 데이터에는 상관없고 실행 후 dbms_stats.gather_schema_stats 를 사용하여 통계정보를 생성하면 됨

- user별 EXPORT하는 방법.
ex.) C:>exp userid=scott/tiger file='C:scott.dmp'

- SYSTEM/MANAGER로 접속한 DBA가 여러 user소유의 오브젝트들을 EXPORT 하는 방법
ex.) C:>exp userid=system/manager owner=scott file='C:scottuser.dmp'

- system user로 다른 유저의 table 몇 개만 Export하는 방법
C:>exp userid=system/manager file='C:exp.dmp' tables=(scott.EMP, scott.DEPT)
=> 위와 같이 table의 schema(user)명까지 지정해야만 export가 성공합니다.

- scott user로 table 몇 개만 EXPORT하는 예
C:>exp userid=scott/tiger file='C:exp.dmp' tables=(EMP, DEPT) log=exp.log

추가 옵션

full=y : 전체 데이터 추출 여부 (기본값 n)

direct : 직접경로 방식으로 export(기본값 n)

indexs : 인덱스 포함 여부(기본값 y)

triggers : 트리거 포함 여부(기본값 y)

rows=n : 오브젝트에 대한 정의만 export (테이블의 저장된 데이터는 export 제외)

buffer : 작업 단위 크기 설정

compress : 익스텐트 통합여부 지정(기본값 y)

grants : 오브젝트 권한 설정에 대한 정보 추출 여부(기본값 y)

log : 로그를 저장할 파일 지정

row : 테이블의 데이터 추출 여부(기본값 y)

consistents : 대상 테이블의 읽기 일관성 지정(기본값 n)

prfile : 필요한 옵션을 파라미터 파일에 설정한 후 해당 파라미터 파일을 export 시 적용

query : 쿼리 조건에 맞는 데이터만 적용 ex) query=\"where id\=100\"

Export 활용

TIP1.COMPRESS 옵션은 모든 익스텐트를 하나의 익스텐트로 통합하여 구성하는 옵션이다. 이 경우 하나의 데이터 파일로만 모든 데이터가

적재되기 때문에 I/O분산 측면에서 분리하다. 그러므로 실제 운영에서는 이와 같이 익스텐트들이 통합되는 것은 좋지 않으므로 Export를 수행할

경우 반드시 COMPRESS 옵션을 N으로 설정하기를 권장한다.

TIP 2. DIRECT 옵션은 오라클 메모리 영역인 SGA를 사용하지 않고 Export를 수행하는 옵션이다. 직접 경로로 수행하여 추출된 파일은

Import시에도 기본적으로 직접 경로로 적재된다. 그러므로 DIRECT옵션을 Y로 설정하면 추출 및 적재 잡업시 보다 빠른 속도를 보장받을

수 있다.

TIP 3.CONSISTENTS 옵션은 Export를 수행한 시점의 데이터를 추출하게 된다. Export 중 변경된 데이터는 언두 데이터를 이용하여 이전 값을

추출하게 되는데 이때 'Snap Shot Too Old' 에러가 발생하기 쉽다. 그래서 CONSISTENTS옵션을Y로 설정하기를 권장한다.

TIP 4. STATISTICS 옵션은 oracle 9i버전에서 특수 통계정보를 수집하는 옵션이다. "EXP-00091: 불완전한 통계를 엑스포트 중입니다." 에러가

발생하지 않게 하기 위해서는STATISTICS옵션을NONE으로 설정하기를 권장한다.

-전체 데이터베이스가 IMPORT됩니다. (Full Level)
C:>imp userid=system/manager file='C:full.dmp' full=y

- scott의 유저 IMPORT를 실행 합니다.(User Level)
C:>imp userid=scott/tiger file='C:scott.dmp'

- 다른 계정으로 IMPORT하기
scott유저의 데이터를 EXPORT받아서 test 유저에게 IMPORT하는 예제 입니다.
C:>exp userid=system/manager file='C:scott.dmp' owner=scott
C:>imp userid=system/manager file='C:scott.dmp' fromuser=scott touser=test

===================================================================================

오라클 홈디렉토리 또는 Base 디렉토리에 가시면 bin 디렉토리가 있습니다.
bin 디렉토리 안에는 여러가지 툴이 있는데 그중에 exp 와 imp 가 mysql dump 와 같은 기능을
가지고 있습니다.
exp help=y 하시면 도움말이 나옵니다.
대화형식으로 백업 하시려면 exp 만 치시면 순서대로 필요한 사항을 입력하시면 dump 가능하
구요
예제) exp scott/tiger file=/home/backup/daily_backup.dmp
log=/home/backup/daily_backup.log grants=y
물론 위의 디렉토리에는 oracle user의 쓰기 권한이 있어야 겠지요.
imp 인경우도 도움말을 보시면 편합니다.
예제) imp scott/tiger file=/home/backup/daily_backup.dmp
log=/home/backup/daily_backup_imp.log ignore=y grants=y buffer=2048000 full=y
여기서 log 는 imp , exp 시 남는 log 입니다. table 이 정상적으로 export 또는 import 되는지
보여주는 옵션입니다.

exp는 보조 백업의 의미로 테이블 단위의 복구가 필요할 때 주로 사용한다.
하지만 장애시점까지의 복구가 아니라 백업받은 시점으로의 복구만 가능하다.

0. exp/imp 제한
   - Export 파일(.dmp)을 네트워크를 통해 전송할 때는 반드시

     이진(Binary) 형태로 전송
   - SQL*Net 을 이용해서 exp/imp를 수행할 수 있음

     (exp userID/password@TNS_ALIAS ...)
   - Stored Procedure, 함수, 패키지를 Import 할 때 재 컴파일의

     필요성이 생길 수 있음
   - exp 도중에 시퀀스(sequence)를 사용하게 된다면,

     시퀀스 번호는 skip 될 수 있음
   - imp할 때 Long Type의 컬럼은 언제나 성공적으로 수행되는 것은 아님

     (imp 대신 copy 명령 사용)

1. 일반적으로 많이 사용하는 exp/imp 명령어

exp userid/password file=exp.dmp owner=vnet direct=y buffer=10240000 grants=y compress=n constraints=y indexes=y rows=y feedback=10000 statistics=none log=vnet.log

imp system/qkrgustlr file=c:\vnet.dmp fromuser=vnet touser=vnet commit=y ignore=y buffer=10240000 grants=y constraints=y indexes=y rows=y feedback=10000 log=c:\imp.log
   ---------------------------------------
   % exp userid/password file=./dmp/TEST.dmp          \
         direct=y buffer=10240000 grants=y            \
         compress=n constraints=y indexes=y rows=y    \
         triggers=n tables=XXXX,YYYY,ZZZZ             \
         feedback=10000 log=./log/exp_test.log

   % imp dbaid/password file=./dmp/TEST.dmp           \
         fromuser=userid touser=otherid               \
         commit=y ignore=y buffer=10240000 grants=y   \
         constraints=y indexes=y rows=y               \
         tables=XXXX,YYYY,ZZZZ                        \
         feedback=10000 log=./log/imp_test.log

2. pipe를 통하여 백업 & 압축하는 exp/imp 명령어
   --------------------------------------------
   % rm /tmp/exp_test
   % /usr/sbin/mknod /tmp/exp_test p
   % compress </tmp/exp_test> ./dmp/TEST.dmp.Z &
   % exp userid/password file=/tmp/exp_test           \
         direct=y buffer=10240000 grants=y            \
         compress=n constraints=y indexes=y rows=y    \
         triggers=n tables=XXXX,YYYY,ZZZZ             \
         feedback=10000 log=./log/exp_test.log
   % rm /tmp/exp_test

   % rm -f /tmp/imp_test
   % /usr/sbin/mknod /tmp/imp_test p
   % uncompress<./dmp/TEST.dmp.Z> /tmp/imp_test &
   % imp dbaid/password file=/tmp/imp_test            \
         fromuser=userid touser=otherid               \
         commit=y ignore=y buffer=10240000 grants=y   \
         constraints=y indexes=y rows=y               \
         tables=XXXX,YYYY,ZZZZ                        \
         feedback=10000 log=./log/imp_test.log
   % rm -f /tmp/imp_test

    참고) exp와 imp를 연결하여 실행
          ftp가 지원되지 않고 TNS로 연결이 가능한 경우 사용한다.
          (파이프를 이용하여 exp하고 곧바로 imp로 연결하여 실행)
          % vi exp_and_imp.sh

            rm  /tmp/exp_node
            /usr/sbin/mknod /tmp/exp_node p
            exp dbaid/password@TNS_ALIAS FILE=/tmp/exp_node OWNER=us_test \

                INDEXES=n BUFFER=204800000 DIRECT=y LOG=exp_test.log &
            imp dbaid/password FILE=/tmp/exp_node FROMUSER=us_test        \

                TOUSER=us_test INDEXES=n COMMIT=y BUFFER=204800000        \

                FEEDBACK=100000 IGNORE=y LOG=imp_test.log
            rm  /tmp/exp_node
                 :wq

3. 파티션된 테이블의 파티션 exp 명령어
   --------------------------------------------
   % exp userid/password file=./dmp/TEST.dmp                     \
         direct=y buffer=10240000 grants=y                       \
         compress=n constraints=y indexes=y rows=y               \
         triggers=n tables=XXX:PT_XXX_2007,YYY:PT_YYY_2007       \
         feedback=10000 log=./log/exp_test.log

   % imp dbaid/password file=./dmp/TEST.dmp                      \
         fromuser=userid touser=otherid                          \
         commit=y ignore=y buffer=10240000 grants=y              \
         constraints=y indexes=y rows=y                          \
         tables=XXX:PT_XXX_2007,YYY:PT_YYY_2007                  \
         feedback=10000 log=./log/imp_test.log
   % rm -f /tmp/imp_test

4. FILESIZE를 이용한 SPLIT exp/imp 명령(8i)
   --------------------------------------------
   % exp userid/password file=./dmp/TEST01.dmp,                  \
                              ./dmp/TEST02.dmp,                  \
                              ./dmp/TEST03.dmp                   \
         direct=y buffer=10240000 grants=y                       \
         compress=n constraints=y indexes=y rows=y               \
         feedback=10000 filesize=100M log=./log/exp_test.log     \
         tables=TEST

   % imp dbaid/password file=./dmp/TEST01.dmp,                   \
                             ./dmp/TEST02.dmp,                   \
                             ./dmp/TEST03.dmp                    \
         fromuser=userid touser=otherid                          \
         commit=y ignore=y buffer=10240000 grants=y              \
         constraints=y indexes=y rows=y                          \
         tables=TEST                                             \
         feedback=10000 log=./log/imp_test.log

5. remote에서 exp하는 명령어
   --------------------------------------------
   % exp userid/password@TNS_ALIAS file=./dmp/TEST.dmp          \
         direct=y buffer=10240000 grants=y                      \
         compress=n constraints=y indexes=y rows=y              \
         triggers=n tables=XXXX,YYYY,ZZZZ                       \
         feedback=10000 log=./log/exp_test.log

참고) \는 UNIX에서 다음 라인과 이어진다는 표시의 기호임.