테이블 먼저 만들고 넣으신다면 데이터를 나눠서 해야합니다.
하지만 CTAS로 이행하는게 빠르긴합니다.
A 테이블에 PK 가 있으면 그걸 기준으로 100만건 정도 INSERT 해보시는건 어떻까요?
근데 저라면 2000만건 그냥 CTAS로 날리겠습니다.
뭐 팁이라긴 뭐한데
CREATE TABLE a_old NOLOGGING AS SELECT * FROM a WHERE 1 != 1 ;
이렇게 하면 테이블은 간단히 만들어 집니다.
데이터를 나눠서 넣는 방법은 어떻게 해야 될까요?
-- 조금이래도 성능을 위해서라면.. -- 이행후 LOGGING 처리 해주세요 CREATE TABLE a_old NOLOGGING AS SELECT * FROM a;
-- 대략 아래와 같습니다. create table a_new nologging as select * from a where 1=2 ; insert /*+ PARALLEL(a_new,4) */ into a_new select /*+ PARALLEL(a,4) */ * from a ; create unique index a_new_ux01 on owner.a_new ~~~~~~ nologging parallel 4 ; exec dbms_stats.gather_table_stats(ownname => ’OWNER’, tabname => ’a_new’, estimate_percent=> 10, cascade => TRUE, degree=> 4) ; alter table a_new logging ; alter table a_new noparallel ; alter index a_new_ux01 logging ; alter index a_new_ux01 parallel 1 ;
INSERT 시 APPEND 힌트 빠졌어요.. ㅎㅎ
-- insert 수행 전 alter session enable parallel dml ; -- parallel 은 append 와 병행 /*+ append parallel(a_new,4) */ /*+ append parallel(a,4) */ 앗~ 꼼꼼하세요 ㅎㅎ
라이선스에 따라 parallel 힌트를 사용할 수 없는 경우가 있다고 하더라구요.
이것도 알아보시고 사용하세요. 오라클 라이선스가 원체 비싸서리..