ORACLE 大批量插入数据

最近有几张表随着时间不断的增长,表中的数据量也越来越大,想把原来的表改成分区表,需要两个步骤:

一:建立分区表

二:把源表的数据迁移到分区表中

但是源表的数据量是1亿的数据量,按照最普遍的方式 INSERT INTO 效率太低了

尝试了一下几种方式:

一.关闭日志,数据追加模式

1.关闭表日志功能

1.ALTER  TABLE  TABLE_NAME  NOLOGGING;

comments: 必须要关掉,不然生成的日志可能会把数据给撑爆掉

 2. 插入方式以追加的方式

INSERT  /*+ APPEND  */ INTO TABLE_NEW 

SELECT  * FROM  TABLE_ORI ;

3.COMMIT 提交 

4.开启表日志功能

ALTER TABLE  TABLE_NAME LOGGING;

说明:这种方式只能按照串行的方式进行,如果有多个任务在同时进行,会导致进程等待,反而会影响传输的效率。

二:PARALLEL模式(并行进程数要谨慎 )

此模式有4种方式,

   1.插入PARALLEL 
         INSERT  /*+  PARALLEL(N)   */    INTO TABLE_NEW  SELECT  *  FROM  TABLE_ORI ;

        这种是采用INSERT 并发,适用于 查询快,插入慢的场景。

    2.查询PARALLEL

        INSERT INTO TABLE_NEW  SELECT  /*+  PARALLEL(N)   */  *  FROM  TABLE_ORI ;

        这种采用查询并发,适用于插入快,查询慢的应用场景。 

    3.插入和查询PARALLEL

        INSERT  /*+  ENABLE_PARALLEL_DML    parallel( T  N)*/   INTO TABLE_NEW T

        SELECT  * FROM   TABLE_ORI;

         注: ENABLE_PARALLEL_DML 是启动DML语句并行的作用。

         这种采用DML并发,适用于执行DML语句慢的应用场景。

    4.Session并发

        ALTER SESSION ENABLE PARALLEL DML;

         INSERT INTO TABLE_NEW  SELECT  /*+  PARALLEL(N)   */  *  FROM  TABLE_ORI ;

         ALTER SESSION DISABLE PARALLEL DML;

        注: 这种模式其实跟第三种差不多,只不过这种是会话级别的。

        这种也是采用DML并发,适用于执行DML语句慢的应用场景。但是这种更适用于那种应用场     景复杂的情况。

  

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值