Impdp过程中索引的进一步处理

  在上一篇《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小时以内。

原文地址:https://www.cnblogs.com/caoyibin/p/14566010.html