差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
study:database:oracle:backup [2012/02/13 14:16] – [Export Utility] bananastudy:database:oracle:backup [2012/02/14 05:42] (現在) – [Import Utility] banana
行 21: 行 21:
 |-owner | EXPORT될 데이터베이스의 소유자명 (User Level Export)[owner=user]| | |-owner | EXPORT될 데이터베이스의 소유자명 (User Level Export)[owner=user]| |
 |-tables | export될 테이블의 리스트(Table Level Export) [tables=(table1, table2, ...)]| | |-tables | export될 테이블의 리스트(Table Level Export) [tables=(table1, table2, ...)]| |
 +|-statistics | 통계정보의 생성유무(estimate/none)|warning을 무시할경우 none|
  
 ===== Import Utility ===== ===== Import Utility =====
 Import명령어의 Syntax는 다음과 같다 Import명령어의 Syntax는 다음과 같다
 <code> <code>
-imp 오라클사용자명/암호@인스턴스명 file=덤프파일이름 fromuser=익스포트한사용자ID touser=임포트할ID+imp userid="오라클사용자명/암호@인스턴스명file='덤프파일이름fromuser=익스포트한사용자ID touser=임포트할ID
 </code> </code>
  
行 43: 行 44:
 |-touser | EXPORT덤프 안에 있는 객체들이 IMPORT될 데이터베이스 계정| | |-touser | EXPORT덤프 안에 있는 객체들이 IMPORT될 데이터베이스 계정| |
  
-===== references ===== +Import 작업은 Export 에 비해 데이터베이스 상황에 따라서 에러 발생 소지가 굉장히 많은 작업이다. 주로 에러는 Export 보다Import 시 많이 발생한다.
-  - [[http://ndolson.com/475|[Oracle] import/export]]+
  
 +에러의 패턴은 주로 
 +  - 익스포트할 사용자와 임포트할 사용자의 ID가 틀린 경우
 +  - 익스포트한 객체들의 테이블 스페이스와 임포트할 테이블 스페이스 이름이 다른 경우
 +  - 임포트할 테이블스페이스 스토리지 옵션과 덤프할 데이터가 맞지 않은 경우 ( Initial 사이즈가 너무 크거나 작다거나 등 )
  
 +의 경우 많이 발생한다.\\
 +\\
 +
 +1. 익스포트한 사용자와 임포트할 사용자의 ID가 틀린 경우
 +
 +fromuser , touser 옵션을 사용하여 명시적으로 ID 를 지정한다.
 +<code>
 +예 ) imp 오라클사용자명/암호@인스턴스명 file=덤프파일이름 fromuser=익스포트한사용자ID touser=임포트할ID
 +</code>
 +\\
 +
 +2. 익스포트한 DB 와 임포트한 DB 의 테이블스페이스명이 틀린 경우
 +
 +이 경우에는 여러가지 해결 방법이 있으나 보통 덤프 파일을 통해서 테이블 생성 스크립트를 만든 후 작업을 진행한다
 +
 +* 덤프 파일에서 테이블 생성 스크립트 추출하기 : imp 명령의 indexfile 옵션을 이용한다
 +<code>
 +imp 오라클사용자명/암호@인스턴스명 file=덤프파일이름 fromuser=익스포트한사용자ID touser=임포트할ID
 +indexfile=스크립트명
 +</code>
 +디렉토리에 스크립트가 생긴 것을 볼 수 있다. 이 생성 스크립트를 바로 사용할 수는 없으니 VI 등의 에디터로 편집한다.
 +
 +에디터에서 보면 각 오브젝트들의 생성 스크립트가 생긴 것을 볼 수 있다. 이 생성 스크립트는 전부 주석 처리가 되어 있는데 
 +(REM) 주석을 모두 제거한다.
 +그리고 생성 스크립트에서 TABLESPACE 이름을 임포트할 곳의 테이블 스크립트에 맞게 변경해준다. 그리고 각 테이블의 생성
 +스크립트 마지막 줄에는
 +... XXX Rows 라고 익스포트된 레코드를 표시하는 부분이 있는데 이 라인들도 모두 제거한다. 그리고 스크립트 처음 부분에
 +보면 첫번째 테이블을 생성하고
 +connect 명령어가 나오는데 이 부분 역시 제거하자.
 +
 +생성 스크립트를 모두 수정하였으면 SQL/Plus에서 테이블생성스크립트를 돌린 후 imp 명령을 다시 실행한다.
 +
 +이때 indexfile 옵션은 없애야 하며 대신 ignore=yes 옵션을 추가한다. ignore=yes 는 임포트시 동일한 이름의 오브젝트가 있는
 +경우 에러를 내고 임포트를
 +skip 하는데 이를 무시하고 임포트 할 수 있게 해준다.
 +<code>
 +imp 오라클사용자명/암호@인스턴스명 file=덤프파일이름 fromuser=익스포트한사용자ID touser=임포트할ID ignore=yes
 +</code>
 +
 +* 테이블스페이스 스토리지 옵션에 따른 에러는 너무 다양한 에러와 처리 방법이 존재하므로 발생한 에러에 맞는 대응을
 +해야함\\
 +\\
 +3. 기존의 자료가 이미 있는 경우 전체 테이블 drop script 만드는 법
 +
 +SQL/Plus 의 Spool 명령어와 TABS 뷰를 이용하여 사용자의 모든 테이블을 드롭하는 스크립트를 생성한다
 +
 +SQL/Plus 접속 후 
 +<code>
 +spool drop.sql ( 파일 이름은 알아서.. )
 +select 'drop table '||table_name||';' from tabs;
 +spool off
 +</code>
 +SQL/Plus 를 빠져나가서 보면 drop.sql 이 생성된 것을 볼 수 있다. 이 파일을 수정해서 사용하면 된다.
 +파일을 열어보면 아까 수행했던 SQL/Plus 화면이 그대로 저장된 것을 볼 수 있다. 이 파일에는 drop table .. 로 시작하는 SQL
 +구문과
 +그렇지 않은 부분이 있으므로 SQL 구문이 아닌 문장을 모두 제거하고 저장한 다음 SQL/PLUS 로 접속해서
 +
 +@drop
 +
 +명령을 실행한다 ( 명령은 아니고 drop.sql 을 실행하라는 SQL/Plus 명령이다. 파일명이 drop_table.sql 일 경우는 @drop_table
 +이런 식으로 실행한다 )
 +
 +테이블이 일괄 드롭되나 몇개 테이블들은 Referencial Integrity 에러를 내면서 드롭되지 않는다. 이런 경우는 수동으로 drop
 +하면된다
 +
 +@drop 으로 테이블을 드롭하였으면
 +<code>
 +select table_name from tabs;
 +</code>
 +문을 실행하여 남아있는 테이블들을 확인한 후 
 +<code>
 +drop table 테이블명;
 +</code>
 +구문을 실행하여 모두 삭제한다.
 +
 +테이블이 모두 drop 되면 위에서 언급한 imp 명령어를 실행해서 임포트 작업을 진행한다.
 +===== references =====
 +  - [[http://ndolson.com/475|[Oracle] import/export]]
 +  - [[http://allinfo.tistory.com/tag/oracle%20imp|오라클 테이블 export/import]]
 +  - [[http://www.shift-the-oracle.com/utility/exp-imp/exp-imp-option.html|エクスポート・インポート(コマンド・オプション)-Oracle ]]

QR Code
QR Code study:database:oracle:backup (generated for current page)