慎用 skip_unused_indexes

 

IMP 一个大表数据时,曾经以为 可以这样做:

1.       import 空表,带索引

2.       将索引置为unusable

3.       使用SKIP_UNUSABLE_INDEXES = Y 参数导入数据

4.       Rebuild nologging 索引

 

个人以为,比单纯的IMP 数据,第四步由于使用NOLOGGING数据,速度肯定会快点。

于是编写两个的比较脚本:

1.       传统的IMP

首先 truncate table outp_bill_items  reuse storage ;

time /t 

imp system/manager  file=outp_bill_items.dmp full=y ignore=y  log = imp.log  feedback = 100000

time /t

 

整个时间为14:47 14:53 不过7分钟左右

 

2.       NOLOGGING 方式:

首先 truncate table outp_bill_items  reuse storage ;

 

time/t  

imp system/manager  file=outp_bill_items.dmp full=y ignore=y  log = imp.log  feedback = 100000     rows=n  trigger=n

sqlplus outpbill/outpbill   @disableidx.sql

imp system/manager  file=outp_bill_items.dmp full=y ignore=y  log = imp.log     SKIP_UNUSABLE_INDEXES = Y

sqlplus outpbill/outpbill   @enableidx.sql

time/t

整个时间为15:59 16:23 都快半小时了

 

其中脚本disableidx.sql

BEGIN

   FOR cur_index IN (SELECT index_name

                       FROM user_indexes

                      WHERE table_name = 'OUTP_BILL_ITEMS'

                        AND index_name NOT IN (

                                          SELECT constraint_name

                                            FROM user_constraints

                                           WHERE table_name =

                                                             'OUTP_BILL_ITEMS'))

   LOOP

      EXECUTE IMMEDIATE ' alter index ' || cur_index.index_name

                        || ' unusable ';

   END LOOP;

END;

/

 

 BEGIN

   FOR cur_index IN (SELECT trigger_name

                       FROM user_triggers

                      WHERE table_name = 'OUTP_BILL_ITEMS')

   LOOP

      EXECUTE IMMEDIATE ' alter trigger ' || cur_index.trigger_name

                        || ' disable ';

   END LOOP;

END;

/

 

exit

脚本enableidx.sql

alter session set sort_area_size  = 120000000   ;

BEGIN

   FOR cur_index IN (SELECT index_name

                       FROM user_indexes

                      WHERE table_name = 'OUTP_BILL_ITEMS'

                        AND index_name NOT IN (

                                          SELECT constraint_name

                                            FROM user_constraints

                                           WHERE table_name =

                                                             'OUTP_BILL_ITEMS'))

   LOOP

      EXECUTE IMMEDIATE    ' alter index '

                        || cur_index.index_name

                        || ' rebuild nologging  ';

   END LOOP;

END;

/

 

 

 BEGIN

   FOR cur_index IN (SELECT trigger_name

                       FROM user_triggers

                      WHERE table_name = 'OUTP_BILL_ITEMS')

   LOOP

      EXECUTE IMMEDIATE ' alter trigger ' || cur_index.trigger_name

                        || ' enable ';

   END LOOP;

END;

/

 exit

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9036/viewspace-167417/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/9036/viewspace-167417/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值