본문 바로가기

오라클DBMS/유틸

[IMPDP] DBLINK를 통한 DATA PUMP IMPORT (NETWORK DATA PUMP)

로컬DB에서 클라이언트 DB의 데이터를 DBLINK를 통해 바로 저장할 수 있다. 


1.로컬DB에 클라이언트DB에 접속가능한 DBLINK를 만든다.

CREATE DATABASE LINK <DBLINK이름>
 CONNECT TO SYSTEM IDENTIFIED BY <비번> 
 USING '(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=<IP나 호스트명>)(PORT=<포트주소>)) (CONNECT_DATA=(SERVICE_NAME=<SID명>)))';  



2. parfile 를 생성(안해도 되지만 편의를 위해)
-- filename.par
DIRECTORY=DATA_PUMP_DIR  -- DATA_PUMP_DIR은 당연 로컬DB에 생성된 DBLINK
job_name=impdp_pre.20111001  -- 수행되는 job의 이름 제약없음 
logfile=imppd_pre.20111001.log -- 생성될 log 파일 DATA_PUMP_DIR 의 위치에 저장된다.
remap_schema=<client의 schema>:<local의 schema> -- 스키마 변경이 필요할 경우 적는다, table만 import 할때는 fromuser touser 의 역활을 한다   
tables=<client의 schema>.<테이블명>    
remap_tablespace=<client의tablespace명>:<local의대체tablespace명>,<여러개일경우반복>:<여러개일경우반복>
network_link=<DBLINK명>
table_exists_action=<해당 옵션은 따로 찾아보기>
content=<해당옵션은 따로 찾아보기>

3.impdp user/password parfile=filename.par  로 수행
 
# 참조 http://www.keiis.co.kr/study/220.DB_Oracle/M910.Object&Utility/H100.Data_Pump_0.html
# table_exists_action

SKIP - 테이블을 있는 그대로 두고 다음 객체 생성으로 이동한다. CONTENT 파라미터를 DATA_ONLY로 지정할 경우
SKIP을 지정할 수 없다.
APPEND - 소스로 부터 row를 읽어 들여 테이블에 적재 시키고, 이미 존재하는 row는 그대로 둠
TRUNCATE - 이미 존재하는 row가 있다면 삭제시킨 후 새로 데이터를 적재 시킴
REPLACE - 이미 존재하는 테이블을 드롭 시킨 후, 테이블을 새로 만들고 데이터를 적재 시킴. CONTET 파라미터를
DATA_ONLY로 지정하느 경우 이 값을 지정할 수 없다.

다음은 옵션을 지정하는데 있어 고려해야 할 사항이다 :

TRUNCATE나 REPLACE를 지정할 경우, 영향을 바는 테이블이 참조 무결성에 의해 참조 되지 않는 지 여부를 확인한다.
SKIP, APPEND 또는 TRUCATE를 지정할 경우, 이미 존재하는 테이블에 대한 인덱스나, 권한 부여, 트리거, 제약 조건이
무시된다. REPLACE를 지정할 경우, 의존 관계에 있는 객체들이 먼저 drop 된 후, 재 생성된다. 이것을
피하기 위해서는 EXCLUDE를 사용하여, 명시적으로 제외를 시키거나 임포트 하고자 하는 덤프 파일에 해당 내용이
포함 되지 않아야 한다.
APPEND나 TRUNCATE를 사용할 경우에는,다른 모든 작업에 앞서 덤프 파일의 내용이 이미 존재하는 테이블에 들어갈 수
있는 형태의 데이터인지를 먼저 확인한다.

이미 존재하는 테이블에 대해서는 external 테이블을 사용하여 load 작업이 수행되는데 이것은, external table 이
constraint나 trigger가 제 기능을 하도록 하기 때문이다. 하지만, active constraint를 위반하는 row 가
하나라도 존재하면,load 작업은 취소되어 아무런 데이터도 load 되지 않는다는 점을 기억해 둘 필요가 있다.

만약 데이터를 반드시 load 시켜야 하는데, constraint voilation을 유발시킬 만한 내용이 있다면
constraint를 먼저 disable 시키고, 데이터를 적재 시킨 후, 문제가 되는 row를 삭제 하고 constraint를
다시 enable 시키는 방법을 사용해야 한다.

APPEND를 사용할 때는, 데이터가 언제나 새로운 공간에 load 된다. 기존에 사용중인 공간에 여유 공간이 있더라도
재 사용되지 않는다. 이와 같은 이유 때문에 데이터에 대한 compress를 별도로 수행할 필요가 있을 수도 있다.
 

# CONTENT 파라미터:

CONTENT 파라미터는 Export 또는 Import 세션에서 사용할 수 있다. 명백하게, export 값이 DATA_ONLY나
METADATA_ONLY였다면, 지정된 데이터만 덤프파일에 존재하여 import 시 사용할 수 있다.

기본값 : ALL

import 될 수 있는 내용을 제한하기 위해서는 다음과 같은 옵션을 사용할 수 있다 :

DATA_ONLY - 이미 존재하는 테이블에 대해서만 데이터를 load 시킨다. 없던 객체를 생성 시키지 않는다.
METADATA_ONLY - 데이터베이스 객체에 대한 정의만 load 시킨다. 테이블의 row 데이터를 load 시키지 않는다.
ALL - 소스의 데이터 및 메타데이터를 load 시킨다. 기본 값.
 


'오라클DBMS > 유틸' 카테고리의 다른 글

[OSX/SQLDeveloper] 메뉴 영어로 바꾸기  (0) 2013.04.04
[SQLDEVELOPER] DBMS_OUTPUT 출력하기  (0) 2011.10.27
[IMP] 마이그레이션  (0) 2010.09.09
[Oracle] Data Pump EXPDP/IMPDP  (0) 2010.09.03
[ORACLE/EXP] EXP-00056,ORA-06401  (0) 2010.07.20