快速向表中插入大量数据Oracle中append与Nologging

当需要对一个非常大的表INSERT的时候,会消耗非常多的资源,因为update表的时候,oracle需要生成 redo log和undo log;此时最好的解决办法是用insert, 并且将表设置为nologging;当把表设为nologging后,并且使用的insert时,速度是最快的,这个时候oracle只会生成最低限度的必须的redo log,而没有一点undo信息。如果有可能将index也删除,重建
   1.alter table table_name nologging;
   2. insert into table_name select * from xxxx; 

注意:APPEND会对表LOCK,不能对其同时操作

对此有了更好的解决方法:

  1、alter table nologging;
      注释:Nologging的设置跟数据库的运行模式有关
         a、查询当前数据库的归档状态:
              select name,log_mode from v$database;
              默认为 NOARCHIVELOG 非归档
         b、nologging在归档模式下有效,非归档模式nologging不起什么作用
         c、为了提高插入的速度,我们可以对表关闭写log功能。 SQL 如下:

                sql> alter table table_name NOLOGGING; 
                插入/修改,完数据后,再修改表写日志:  
                sql> alter table table_name LOGGING;
          d、没有写log,速度会块很多,但是也增加了风险,如果出现问题就不能恢复。  

  2、drop掉索引约束之类的;
      注释:

  3、 
      注释:

        a. 、append 属于direct insert,归档模式下append+table nologging会大量减少日志,

             非归档模式append会大量减少日志,append方式插入只会产生很少的undo

       b、综合一下吧:一是减少对空间的搜索;二是有可能减少redolog的产生。所以append方式会快很多,一般用于大数据量的处理

       c、建议不要经常使用append,这样表空间会一直在高水位上,除非你这个表只插不删

       d、oracle append有什么作用?

           请教一下,oracle中append是做什么用的。

           insert into table1 select * from table2

           在使用了append选项以后,insert数据会直接加到表的最后面,而不会在表的空闲块中插入数据。

           使用append会增加数据插入的速度。

           的作用是在表的高水位上分配空间,不再使用表的extent中的空余空间

          append 属于direct insert,归档模式下append+table nologging会大量减少日志,
          非归档模式append会大量减少日志,append方式插入只会产生很少的undo

          不去寻找 freelist 中的free block , 直接在table HWM 上面加入数据。
  4、总结
       测试证明:

          1. 不管哪种模式下append要与nologging方式联用才能达到很好的效果。

          2. 非归档与归档方式,只用NOLOGGING是不起效果的。

          3. 非归档下append已达到不错的效果,但不及与nologging的联用方式。

          4. 归档下单append起不到效果。

          NOLOGGING插完后最好做个备份。

          另外,如果库处在FORCELOGGING模式下,此时的nologging方式是无效的。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值