안녕하세요
expdp 수행시 스키마내 특정테이블에 대한 정보만 (table data, index) dump로 만들고 싶습니다.
expdp 옵션에서 table=테이블명 외에 include, content 등등 여러 옵션을 테스트해봤는데
테이블 데이터만 가져오는 상황입니다.
혹시 테이블과 인덱스를 모두 가져오려면 어떻게 해야할까요??
별도 옵션 없이 다른스키마로 import 해봤는데 인덱스도 동일하게 만들어 주네요. 11g에서 테스트했습니다.
-- 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 처리 중
-- 저는 아래처럼 하시길 권해 드립니다. -- 추출은 항상 전체를 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~~ 등....
답변 너무 감사합니다
큰도움 되었습니다!
table drop 후 impdp 수행하면 index 까지 생성하는 걸 확인했습니다.
추가로 궁금한게 있는데
table truncate후 형상만 남아있는 상태에서 TABLE_EXISTS_ACTION옵션을 truncate로 주고 수행하면
table 데이터는 잘 적재하는데 index는 만들지 않습니다.
혹시 관련해서 어떤 이유가 있을까요?
-- 작업하신 전체 내역을 몰라서 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 에 기록이 남습니다.
-- 만약 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 로 변경하지 않기 때문입니다. ...