ORACLE 大表分区笔记

系统工单运行了一年,系统主表:工单表tbl_wo与工单实例表tbl_task频繁读写,每个表的数据量都>2000W,成为系统的一个瓶颈,为此使用了oracle的大表分区,解决大量数据造成系统缓慢问题,中间遇到些坑,记录下来,下面是具体的操作步骤:

1.停止所有应用

       涉及到频繁操作的表做大表分区,最理想的情况是停止所有应用,不停风险控不了

2.将tbl_wo与tbl_task改名为tbl_wo_back与tbl_task_back

        需要备份的,可以使用第四点nologging append将数据考到临时表,2000W数据7分钟复制完,当然也可以不备份,改个名字几秒钟完事,节省上线时间。

3. 根据create_date日期型字段按天创建tbl_wo与tbl_task表

        由于系统的tbl_wo与tbl_task表大部分查询按天操作,所以按天做表分区,大家具体情况具体分析,表怎么分区自行百度

create table TBL_TASK
(
  task_id                  VARCHAR2(12) not null,
  create_date              DATE
)PARTITION BY RANGE (CREATE_DATE) INTERVAL (NUMTODSINTERVAL(1, 'day'))
(partition part_task01 values less than(to_date('2018-01-01', 'yyyy-mm-dd')));
;

 

6.将tbl_wo_back与tbl_task_back数据拷贝到tbl_wo与tbl_task

       2000W以上的数据使用nologging append方式插入,我这边是开了两个sqlplus,分别插入tbl_wo与tbl_task,7分钟复制完成

alter table TBL_TASK_BACK nologging;

insert /*+ append */ into TBL_TASK_BACK select * from TBL_TASK;

commit;

alter table TBL_TASK_BACK logging;

5.删除tbl_wo_back与tbl_task_back的索引(一定要删除),重建tbl_wo与tbl_task索引

         tbl_wo与tbl_task直接改名为tbl_wo_back与tbl_task_back,原来属于tbl_wo与tbl_task的索引名字没变,但是索引已经是tbl_wo_back与tbl_task_back的,所有必须删掉tbl_wo_back与tbl_task_back的索引,重建tbl_wo与tbl_task的索引

5.重启应用

你可能感兴趣的:(数据库,大表分区,快速插入)