在上一篇《impdp數據導入過程中exclude參數是否排除index的驗證 》中描述的在Impdp導入數據的過程中分為兩個階段:
1.純數據導入,即content=data_only;
2.追加索引,即include=index,constraint;
導入過程中,發現:
ORA-39083: Object type INDEX:"WXJZCSK"."IDX_ACD8_PRSENO" failed to create with error:
ORA-01157: cannot identify/lock data file 5050 - see DBWR trace file
ORA-01110: data file 5050: '+DATADG/CXJBDB/B24267126E548D42E0531A14580AE2EF/TEMPFILE/temp.1674.1067731087'
Failing sql is:
CREATE UNIQUE INDEX "WXJZCSK"."IDX_ACD8_PRSENO" ON "WXJZCSK"."ACD8" ("PRSENO") REVERSE PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE "AHXNB" PARALLEL 1
可見,使用impdp追加索引的過程中,哪怕是在impdp語句中配置了parameter參數大於1,建索引的過程parallel依然為1(這或許也是bug)。
進一步的優化思路:
1)小表直接導入,大表導入數據前先禁用索引和約束;
比如:
alter index SYS_C00XXXXX unusable;
alter table TESTXX disable constraint SYS_C00XXXX;
2)然后使用數據泵導入數據;
3)最后並行重建索引,激活約束;
alter index idx_XXXXX rebuild online compute statistics parallel 16;
alter index idx_XXXXX noparallel;
alter table TESTXX enable constraint SYS_C00XXXXX;
小結:
在數據導入過程中,挑出比較大的表進行處理。並行創建索引速度明顯快很多,總體的數據導入快了很多。經過這樣處理,導入總時間縮短到10小時以內。
