expdp 수행시 특정테이블관련 0 7 5,231

by 김준수 [Oracle 기초] oracle 복구 [2022.10.13 17:37:41]


안녕하세요

expdp 수행시 스키마내 특정테이블에 대한 정보만 (table data, index) dump로 만들고 싶습니다.

expdp 옵션에서 table=테이블명 외에 include, content 등등 여러 옵션을 테스트해봤는데

테이블 데이터만 가져오는 상황입니다.

 

혹시 테이블과 인덱스를 모두 가져오려면 어떻게 해야할까요??

by pajama [2022.10.14 09:14:56]

별도 옵션 없이 다른스키마로 import 해봤는데 인덱스도 동일하게 만들어 주네요. 11g에서 테스트했습니다.


by 포동푸우 [2022.10.14 10:03:51]

-- hr 스키마의 table 을 expdp 로 추출하면, table 과 table 종속된 object 가 함께 추출 됩니다. 주석, 통계 등이 모두 포함됩니다. 

expdp system/ schemas=hr content=all include=table,index directory=DATA_PUMP_DIR  dumpfile=hr_test1014ti_expdp.dmp logfile=hr_1014ti_expdp.log 
expdp system/ schemas=hr content=all include=table        directory=DATA_PUMP_DIR  dumpfile=hr_test1014t_expdp.dmp logfile=hr_1014t_expdp.log 

  >> 위 명령어 추출대상 동일
객체 유형 SCHEMA_EXPORT/TABLE/TABLE 처리 중
객체 유형 SCHEMA_EXPORT/TABLE/GRANT/OWNER_GRANT/OBJECT_GRANT 처리 중
객체 유형 SCHEMA_EXPORT/TABLE/COMMENT 처리 중
객체 유형 SCHEMA_EXPORT/TABLE/INDEX/INDEX 처리 중
객체 유형 SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT 처리 중
객체 유형 SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS 처리 중
객체 유형 SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT 처리 중
객체 유형 SCHEMA_EXPORT/TABLE/TRIGGER 처리 중
객체 유형 SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS 처리 중

-- 우리가 흔히 말하는 Table 과 index 만 추출하는 명령어는 아래와 같습니다
expdp system/ schemas=hr content=all include=TABLE/TABLE, TABLE/INDEX/INDEX  directory=DATA_PUMP_DIR  dumpfile=hr_test1014w_expdp.dmp logfile=hr_1014w_expdp.log 

  >> 위 명령어 추출대상 객체 
객체 유형 SCHEMA_EXPORT/TABLE/TABLE 처리 중
객체 유형 SCHEMA_EXPORT/TABLE/INDEX/INDEX 처리 중

 


by 포동푸우 [2022.10.14 10:06:51]
-- 저는 아래처럼 하시길 권해 드립니다. 

-- 추출은 항상 전체를
expdp system/ schemas=hr content=all  directory~~ dumpfile~~ logfile~~

-- 적재는 필요한 것만 
impdp system/ schemas=hr content=metadata_only  include=TABLE/COMMENT, INDEX/STATISTICS/INDEX_STATISTICS directory~~ dumpfile~~ logfile~~
impdp system/ schemas=hr content=data_only        include=TABLE/TABLE directory~~ dumpfile~~ logfile~~

등....

 


by 탈황 [2022.10.14 11:21:47]

답변 너무 감사합니다

큰도움 되었습니다!

table drop 후 impdp 수행하면 index 까지 생성하는 걸 확인했습니다.

 

추가로 궁금한게 있는데

table truncate후 형상만 남아있는 상태에서 TABLE_EXISTS_ACTION옵션을 truncate로 주고 수행하면

table 데이터는 잘 적재하는데 index는 만들지 않습니다.

혹시 관련해서 어떤 이유가 있을까요?

 


by 포동푸우 [2022.10.14 15:37:19]
-- 작업하신 전체 내역을 몰라서 Index 가 만들어 지지 않는 이유를 알기 어렵네요
-- 위 댓글에서 제가 언급한 impdp 문장은 하나의 셈풀 입니다. 대상 객체/상황에 따라 여러 옵션을 조정해야 합니다. 

-- 제가 아는 개념으로는,
impdp 방법을 포함해서, 특정 테이블에 data 가 입력되면, 존재하는 index 는 data 가 반영 되 변경됩니다. 
impdp 수행 시, content=all 혹은 metadata_only 를 사용하면, table 생성 SQL 수행 후, Index 생성 SQL 도 수행됩니다. 
impdp 수행 시, content=data_only 를 사용하면, DDL (Create/alter table/index ... 등) , DCL ( grant .... 등) 없이 이미 존재하는 table 에 data rows 만 Insert 합니다. 

-- expdp/impdp 수행 시 오류가 발생 되었다면, logfile 에 기록되니 확인해 봐야 합니다. 
impdp 수행 후,  index 는 안 만들어져 있는데, logfile 에 index 생성을 실패한 기록이 없다면, 아래 경우를 예상해 볼 수 있습니다. 
....case1) impdp 수행 시점에 index 가 없었는데 content=data_only 로 data 만 적재되었다 
....case2) impdp 수행 명령어에 index 에 대한 요청이 없다
index 생성하려 했으나 권한부족 등으로 수행하지 못했다면 logfile 에 기록이 남습니다. 

 


by 포동푸우 [2022.10.14 15:57:54]
-- 만약 hr 유저의 EMPLOYEES 테이블 및 관련 object 들만 추출/적재 하시려면 간략하게 아래처럼 할 수 있습니다.  
expdp system/ content=all tables=HR.EMPLOYEES   directory=DATA_PUMP_DIR  dumpfile=hr_test1014e_expdp.dmp logfile=hr_1014e_expdp.log 
HR.EMPLOYEES 및 관련 object 삭제 
impdp system/ content=all tables=HR.EMPLOYEES   directory=DATA_PUMP_DIR  dumpfile=hr_test1014e_expdp.dmp logfile=hr_1014i_expdp.log 
-- schemas 와 tables 는 함께 사용할 수 없는 옵션 입니다. 

-- 만약 hr 유저의 EMPLOYEES 테이블을 추출해, 같은 DB의 sh 유저로 적재 테스트를 해 본다면 ? 
-- remap 라는 옵션을 사용할 수 있습니다.  
impdp system/ content=all tables=HR.EMPLOYEES remap_schema=HR:SH  directory=DATA_PUMP_DIR  dumpfile=hr_test1014e_expdp.dmp logfile=hr_1014sh_expdp.log 
-- 그럼 아마 대부분은 적재 될 겁니다. Table 생성,, Index 생성,, grant 등.. 
-- FK 들은 대부분 실패하게 됩니다.  ==> HR 스키마에 있던 다른 object 들이 SH 스키마에 없을 테니까요 
-- Package/Function/Procedure/View 들은 다수 Invalid 상태가 됩니다. ==> Create/Alter 등 구문만 SH 에서 수행하지 그 SQL 내부 HR 스키마를 SH 로 변경하지 않기 때문입니다. 

...

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입