oracle分区表创建——实现重新定义普通表为分区表

一.什么是表分区

表分区,是指根据一定规则,将数据库中的一张表分解成多个更小的,容易管理的部分。从逻辑上看,只有一张表,但是底层却是由多个物理分区组成(例如oracle的各个表空间)

二.分区表有何好处

1.可以存储更多的数据。使用分区表能够把大数据量表丢到各个不同的物理存储位置上,和单个磁盘,解决了存储空间的限制。

2.能够优化查询。在一些业务下,过期很久的数据通常很少被查询,而通过分区表的合理分区,我们可以取到指定分区或部分分区内的数据,大大提高查询效率。

3.分区表可以更好的维护数据。当我们要对某个分区的数据进行批量删除或者改动的时候,不会影响到别的分区数据。

三.分区实操

当遇到一些例如招聘历史数据的查询时,通常过期好几年的招聘数据是不怎么需要被查询出来的,因此例如遇到实现对每一年的招聘数据进行分区,我们就可以使用分区表来处理。但是当我们在初始构建表的时候,可能我们并不会想到要使用分区表来处理这类问题,创建的表只是一张普通表,而普通表是无法转换为分区表的。oracle官方为了解决这个问题,实现了对普通表进行重新定位为分区表的内置方案。接下来就让我们看看如何实现吧!

1.原始表(主键为ID)

create table demo
(
ID NUMBER(19) not null,
"C_DATE" DATE NOT NULL ENABLE,,
POST_NAME VARCHAR2(4)
)

2.判断当前的原始表是否支持分区操作

执行call dbms_redefinition.can_redef_table('demospace', 'demo'); --参数1:表空间,参数2:表名称

3.创建一张demo中间分区表,用来重新定义原始表时作为数据的过渡

create table demo_temp
(
ID NUMBER(19) not null,
"C_DATE" DATE NOT NULL ENABLE,,
POST_NAME VARCHAR2(4)
)

PARTITION BY RANGE (C_DATE) --按时间分区

  PARTITION DATE_RANGE1 VALUES LESS THAN (TO_DATE('2019-01-01','yyyy-mm-dd')) TABLESPACE demospace,
  PARTITION DATE_RANGE2 VALUES LESS THAN (TO_DATE('2020-01-01','yyyy-mm-dd')) TABLESPACE demospace_2, 
  PARTITION DATE_RANGE3 VALUES LESS THAN (TO_DATE('2021-01-01','yyyy-mm-dd')) TABLESPACE demospace_3

(此外,还支持按id分区 ,按list分区等分区方式,这里就不详细写出来了。

RANGE (C_DATE) 为分区对应的条件字段,DATE_RANGE1 为分区的区名称,demospace为分区对应放置的表空间)

4.执行开始重定义方法

call dbms_redefinition.start_redef_table('avmdm', 'BUILDING', 'BUILDING_temp');

5.执行同步临时表与原始表中的数据方法

call dbms_redefinition.sync_interim_table('avmdm', 'BUILDING', 'BUILDING_temp');

6.执行结束重定义方法

call dbms_redefinition.finish_redef_table('avmdm', 'BUILDING', 'BUILDING_temp');

当执行到此,我们即完成了对普通表转换成一个分区表的操作。我们就可以对其进行分区表的查询方式。

例如:select * from demo partition(DATE_RANGE1),即为查询分区1下的所有数据。


版权声明:本文为qq_40606397原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。