Oracle创建分区表

为什么要分区(Partition)

  1、一般一张表超过2G的大小,ORACLE是推荐使用分区表的。

  2、这张表主要是查询,而且可以按分区查询,只会修改当前最新分区的数据,对以前的不怎么做删除和修改。

  3、数据量大时查询慢。

  4、便于维护,可扩展:11g 中的分区表新特性:Partition(分区)一直是 Oracle 数据库引以为傲的一项技术,正是分区的存在让 Oracle 高效的处理海量数据成为可能,在 Oracle 11g 中,分区技术在易用性和可扩展性上再次得到了增强。

  5、与普通表的 sql 一致,不需要因为普通表变分区表而修改我们的代码。

Oracle表分区分为四种类型,分别为范围分区,散列分区,列表分区和复合分区。

1、范围分区

就是根据数据库表bai中某一字段的值的范围来划分分区。

数据中有空值,Oracle机制会自动将其规划到maxvalue的分区中。

2、散列分区

根据字段的hash值进行均匀分布,尽可能地实现各分区所散列的数据相等。

散列分区即为哈希分区,Oracle采用哈希码技术分区,具体分区如何由Oracle说的算,也可能我下一次搜索就不是这个数据了。
3、列表分区

列表分区明确指定了根据某字段的某个具体值进行分区,而不是像范围分区那样根据字段的值范围来划分的。

4、复合分区
根据范围分区后,每个分区内的数据再散列地分布在几个表空间中,这样我们就要使用复合分区。复合分区是先使用范围分区,然后在每个分区同再使用散列分区的一种分区方法。

比如将part_date的记录按时间分区,然后每个分区中的数据分三个子分区,将数据散列地存储在三个指定的表空间中。

符合分区目前只能是范围打头,如:范围-散列分区,范围-列表分区

使用较多的目前感觉是范围分区和列表分区。

下面练习下范围分区的创建。

表已创建  目前的Oracle是不支持对已有表直接转换成为分区表,可行的办法是新建一个分区表将原表数据导入到分区表

  新建表temp,接着之前的表结构来

因为linux服务器的时间有问题,更新下时间

[root@clf ~]#     yum install  -y  ntpdate
[root@clf ~]#     ntpdate  ntp.aliyun.com

 首先是范围分区,范围分区在Oracle11g和之前的版本有了不同的特性,通过Interval-Partition特性来实现,简单的说就是在之前的版本如果分区表用完了,就需要手动创建表分区,这种形式的创建存在风险,当我们的数据试图插入不存在的分区时,Oracle会拒绝执行插入操作,导致db操作失败,而Oracle作为一个成熟的dbms,自然需要解决这些问题,所以就出现了Interval-Partition,即间隔分区,它的作用就是当试图插入的分区不存在时就以规定的间隔自动创建表分区,普通的表分区就不弄了,试一下Interval-Partition。

 

 

 可以看到表分区已经在工作了,接下来将普通的范围分区改为间隔分区,

重新设置下时间,然后插入新的数据

 然后往分区表插入24号数据

 

 另外也可以直接在创建表的时候指定间隔分区

partition by range (TIMER) interval (NUMTODSINTERVAL (5, ‘day’) ),效果是一样的。

范围分区的创建是比较简单和直接的,通过partition by list(字段)创建,它相当于根据字段值创建一个单个的表分区,这对于一些根据特殊字段来存放数据的情况十分有用。

原文地址:https://www.cnblogs.com/YsirSun/p/13548732.html