• oracle大表删除数据方案


    需求简介:生产数据库一个表有27亿多数据,要删除其中其中2014年之前的历史数据(大约4亿左右),表信息:5个字段的主键、一个字段的单列索引、hash分区。

    数据库情况:每日1:00-9:00会跑增量数据程序,其他sql不能影响增量程序。(所以数据要在9:00-24:00之内跑完)

    解决方案1:

    delete /*+parallel(32)*/ from table_name where date<to_date('2014-01-01','yyyy-mm-dd');

      结果:删除了8个小时,才删除几千万,怕影响第二天增量程序,直接杀进程,进程杀完数据回滚了20多小时,第二天增量最终还是影响了。

    解决方案2(采用的):

    --1,建分区表(如果不是分区表可以create...select)
    
    --2,插入数据
    insert /*+parallel(32)*/ into table_name_new
    select /*+parallel(32)*/* from  table_name where date>=to_date('2014-01-01','yyyy-mm-dd');
    
    --3,创建索引
    create index index_name1 on table_neme_new(column1) parallel 32;
    
    --4,索引并发创建要关闭并行,这样在我们使用索引时会影响执行计划,也会消耗很多的资源。所以,我们需要对这个并行度进行修改,改成noparallel
    alter index index_name1 noparallel;
    
    --5,创建主键,由于创建主键不能开启并行,所以要先创建主键字段唯一索引,再创建主键
    create unique index pk_name1 on table_neme_new(column1,column2,...) parallel 32;
    alter index pk_name1  noparallel;
    alter table table_neme_new add constraint pk_name1 primary key(column1,column2,...);

    --6,核对数据量没问题,将老表rename其他名字,将新表rename老名字

      结果:插入数据3.5小时,建单列索引40分钟,建主键40分钟。达到可以接受范围。

  • 相关阅读:
    (转)Java 详解 JVM 工作原理和流程
    sql复杂查询语句总结
    公众平台服务号、订阅号、企业号的相关说明
    新公司注册流程
    认缴出资额和实缴出资额的区别
    ***iOS学习之Table View的简单使用和DEMO示例(共Plain普通+Grouped分组两种)
    APP后端处理视频的方案
    iOS应用程序生命周期(前后台切换,应用的各种状态)详解
    app后端搜索入门
    APP后端处理表情的一些技巧
  • 原文地址:https://www.cnblogs.com/dongchao3312/p/12777782.html
Copyright © 2020-2023  润新知