2013-04-30 12 views
0

저는 DBA 또는 DB 전문가가 아닌 개발자입니다. 하지만 제 업무의 일환으로 다른 db로 가져 오기 위해 데이터를 내보낼 수 있어야합니다. 하지만, 내보내는 동안 덤프 파일로 들어갈 행 데이터를 변경할 수 있어야합니다. 그게 가능하니? 내가 1,2,3,4... 값을 가진 ID 컬럼을 가지고 있고 exporting 중에 결과 데이터 -1,-2,-3,-4...에 대해 ID*-1을 수행 할 수 있어야한다고 말할 수 있습니다. 이렇게하면 대상 DB에 데이터가 이미 존재할 때 데이터를 마이그레이션하는 데 도움이됩니다. 그것은 바보 같은 질문이 될 수도 있지만 난 그냥 어떤 가능성oracle expdp untility를 사용하면서 행의 데이터 변경

찾고 있어요

답변

2

당신은 변환 할 패키지를 만들 수 있습니다 가정이 작업을 수행 할 expdpREMAP_DATA 옵션을 사용하여 작동 할 수 있습니다 : 간단한 데이터

을 :

create table t42 (id number); 

insert into t42 select level from dual connect by level <= 5; 

select * from t42; 

     ID 
---------- 
     1 
     2 
     3 
     4 
     5 
... 그리고 패키지 기능 :

create package p42 as 
    function negate(p_number in number) return number; 
end p42; 
/

create package body p42 as 
    function negate(p_number in number) return number is 
    begin 
     return -1 * p_number; 
    end; 
end p42; 
/

당신은로 내보낼 수 있습니다, 다시 동일한 DB/스키마에이 시험에서 다음 가져 오기 :

expdp directory=data_pump_dir dumpfile=d42.dmp nologfile=yes tables=t42 \ 
    remap_data=t42.id:p42.negate 
impdp directory=data_pump_dir dumpfile=d42.dmp nologfile=yes tables=t42 \ 
    content=data_only 

표는 현재했습니다

select * from t42; 

     ID 
---------- 
     1 
     2 
     3 
     4 
     5 
     -1 
     -2 
     -3 
     -4 
     -5 

사용뿐만 아니라 수입에서 동일한 수정을 할 수있는 impdp 대신 REMAP_DATA 매개 변수 원칙은 동일합니다. 데이터를 수정하려는 지점에 따라 달라집니다.

+0

분명히 내 목적을 달성 할 것입니다. REMAP_DATA에 대해 더 많이 파헤 치면 더 많은 작업을 수행 할 수 있습니다. 감사 – Pokuri