2014-04-17 2 views
1

oracle dmp 파일이있어서 데이터를 테이블로 가져와야합니다. 덤프의 데이터에는 새 행과 업데이트 된 행이 없습니다. 나는 import 명령과 IGNORE = Y를 사용하기 때문에 모든 새로운 행을 잘 가져옵니다. 하지만 기존 행을 가져 오거나 덮어 쓰지 않습니다 (위반 된 고유 키 제약 조건에 대한 경고가 표시됨). 가져 오기가 기존 데이터를 새로운 데이터로 업데이트하도록하는 옵션이 있습니까?Oracle 데이터 덤프 가져 오기 및 기존 데이터 덮어 쓰기

답변

4

아니요. 데이터 펌프를 사용하는 경우 TABLE_EXISTS_ACTION=TRUNCATE 옵션을 사용하여 기존의 모든 행을 제거하고 덤프 파일의 모든 항목을 가져올 수 있지만 기존 행을 업데이트하고 새 파일에없는 행만 남겨 둘 수 있습니다 - 즉 삭제하지 말라. (분명히 밝혀졌지만 업데이트 만 언급했기 때문에 그렇게 생각하지는 않는다.) 그것이 적절하지 않을 수도있다. 그리고 덤프 파일은 expdp이 아닌 이전의 exp 도구에서 가져온 것이므로 데이터를 다시 내보낼 수있는 경우가 아닙니다.

덤프에없는 기존 행을 삭제하려면 가져 오기 전에 영향을받은 모든 테이블을자를 수 있습니다. 그러나 그것은 당신이 스스로 수행해야 할 별도의 단계 일 것입니다. 어떤 것이 아닙니다. imp이 당신을 위해 할 것입니다. 테이블은 잠시 동안 비어있을 것이므로 중단 시간을 가져야합니다.

imp에서 이름 바꾸기를 지원하지 않으므로 다른 스키마의 새 스테이징 테이블로 가져올 수도 있습니다. 그런 다음 실제 테이블에 새 데이터를 merge으로 사용합니다. 이는 최소한의 파괴적인 접근 방식 일 수 있습니다. 그래도 모든 merge 문을 디자인하고 작성해야합니다. 이 작업을 자동으로 수행 할 수있는 기본 제공 방법은 없습니다.

0

임시 테이블로 가져온 다음이를 조인하여 레코드를 조정할 수 있습니다.

기존 파일을 임시 테이블로로드하려면 impdp 옵션 REMAP_TABLE을 사용하십시오.

impdp .... REMAP_TABLE=TMP_TABLE_NAME 

로드가 완료되면 임시 테이블의 기존 테이블에서 MERGE 문을 실행하십시오.

관련 문제