DBDBDEEP

오라클에서 익스포트 임포트는 사용자의 의도에 따라 많이 사용하기도 합니다.

(물론 그냥 DB링크를 연결하는게 제일 간단..)


하지만 할때마다 조금씩 헷갈리는 부분이 있어 스텝별로 정리해봅니다.


테스트는 A(test0509) 라는 테이블을 export 후 A라는 테이블로 import 했을때 변화를 알아보겠습니다.


먼저 임의의 테이블을 만들었습니다.


1. 먼저 임의의 테이블을 만든다.

create table test0509 as select * from dba_objects;

select count(*) from test0509  --33742개를 확인


2. 어디에 ~~.dmp를 떨굴지 확인한다.


SELECT * FROM dba_directories; 


3. 새로 생성하려면 아래와같이 생성한다.

CREATE DIRECTORY TEST_DIRECTORY as '/경로'; 


4. 해당 DB 디렉토리에 권한을 준다.

GRANT READ, WRITE ON DIRECTORY TEST_DIRECTORY to system;


5. 위에서 만든 테이블을 익스포트한다. 에러없는지 확인후 test.dmp파일이 떨구어 졌는지 확인한다.

expdp system/manager DIRECTORY= TEST_DIRECTORY  tables=스키마.test0509 DUMPFILE=test.dmp


6. 다시 임포트 해준다.

impdp apps/apps DIRECTORY= TEST_DIRECTORY   tables=스키마.test0509 DUMPFILE=test.dmp


7. 이미 존재하므로 에러가 아래와 같이 발생할것이다.

ORA-39151: Table "APPS"."TEST0509" exists. All dependent metadata and data will be skipped due to table_exists_action of skip

Processing object type TABLE_EXPORT/TABLE/TABLE_DATA


8. 아래 content=data_only 옵션을 붙여주고 다시 임포트 한다.

impdp apps/apps DIRECTORY= TEST_DIRECTORY   tables=스키마.test0509 DUMPFILE=test.dmp content=data_only


※CONTENT옵션에는 여러가지가 있다고 한다.

CONTENTS = [ALL | DATA_ONLY | METADATA_ONLY}


9. 에러가 없는지 확인

 select count(*) from test0509 ; 

조회해 보면 674846건임을 확인할수 있다.

즉 동일 데이터를 추가한것이다.


10. *번외 테이블 빈껍데기(metadata_only)를 만들때 테이블명은 기존 테이블 명이어야 한다. 

impdp apps/apps DIRECTORY= TEST_DIRECTORY   tables=스키마.test0509 DUMPFILE=test.dmp content=metadata_only

만일 다른 테이블 명을 넣는다면

ORA-39002: invalid operation

ORA-39166: Object xxx.테이블 was not found.

에러를 만날것이다.


그럼 다른 테이블명에다 import 하고 싶다면?? 아래를 참고하도록 한다.

http://moonge.tistory.com/100


이 글을 공유합시다

facebook twitter googleplus kakaoTalk kakaostory naver band