블로그 이미지
redkite

카테고리

분류 전체보기 (291)
00.SI프로젝트 산출물 (0)
00.센터 운영 문서 (0)
01.DBMS ============.. (0)
01.오라클 (117)
01.MS-SQL (15)
01.MySQL (30)
01.PostgreSql (0)
01.DB튜닝 (28)
====================.. (0)
02.SERVER ==========.. (0)
02.서버-공통 (11)
02.서버-Linux (58)
02.서버-Unix (12)
02.서버-Windows (2)
====================.. (0)
03.APPLICATION =====.. (11)
====================.. (0)
04.ETC =============.. (0)
04.보안 (5)
====================.. (0)
05.개인자료 (1)
06.캠핑관련 (0)
07.OA관련 (1)
Total
Today
Yesterday

달력

« » 2024.4
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

공지사항

최근에 올라온 글

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
-전체 데이터베이스가 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에서 다음 라인과 이어진다는 표시의 기호임.

 

Posted by redkite
, |

최근에 달린 댓글

최근에 받은 트랙백

글 보관함