分享

oracle表分区

 天行健861010 2012-11-09

   对大数据量的处理方法有很多,并且根据项目实际情况不尽相同,但是最常用而且通用的办法就是对大数据量的表进行分区操作,分区操作优点很多,     以下是网络资料中总结的优点:

  1. 高可用性:如果表的一个分区由于系统故障而不能使用,表的其余好的分区仍然可以使用;
  2. 减少关闭时间:如果系统故障只影响表的一部分分区,那么只有这部分分区需要修复,故能比整个大表修复花的时间更少;
  3. 维护轻松:对于大型的历史数据表,将其分区,分别管理和方便地添加和删除。;
  4. 均衡I/O:可以把表的不同分区分配到不同的磁盘来平衡I/O改善性能;
  5. 改善性能:对大表的查询、增加、修改等操作可以分解到表的不同分区来并行执行,可使运行速度更快;
  6. 基于分区的 join 操作,会提高查询性能
  7. 分区对用户透明,最终用户感觉不到分区的存在。

在看看分区的种类,在Oracle 11g以前:

  1. 范围分区

    范围分区是对表中的某个字段值按范围进行分区,根据值的范围决定将该数据存储在哪个分区上,经常使用到的是按数据的时间段进行分区,这样除了根据时间段操作数据可以提高性能外还有一个很大的用途是对于存在时效性的数据,比如只需要存储一个月以内的数据,那我们可以按照天进行分区,然后定时将即将超期的数据进行自动删除而不会影响整张表的其他分区,同样第二天用到的表分区也可以定时进行建立。除此之外可以根据需要按照其他范围进行分区,但是分区的一个问题就是可能因某个范围数据比较多,而其他的比较少导致表数据分布不均影响性能。
  2. 散列分区

    散列分区通过指定分区编号来均匀分布数据的一种分区类型,因为通过在I/O设备上进行散列分区,使行这些分区大小一致。 散列分区可以基于分区字段的HASH值,自动将记录插入到指定分区,且总体性能最好,在不知道数据范围的情况下可以使用。

  3. 列表分区

    如果数据表中的某列的值的可选项是固定的,那么可以使用列表分区。列表分区对每条数据怎么对应到一个分区给出了很明确的显示。例如可以将某设计为列表分区字段的值为(A,B,C,D,E)的数据放到一个分区,而值为(F,G,H,I)的数据放到其他分区等等。需要注意列表分区只支持单个字段。
  4. 复合分区
    支持Range-Hash,Range-List。只有子分区是从物理上创建在标空间上的。分区只是逻辑上的表示。

在Oracle 11g时又增加了几种新的分区种类:

  1. 引用分区

    简单的说可以使A 表的子表 B根据 A表中的字段(B表中无此字段)进行分区。引用原文:如果您希望按照父表分区的方式对子表进行分区,但没有相同的列,您又不想仅仅为了分区而引入这些列,此时引用分区将非常方便。而且,您不必针对每个子表显式声明一个很长的分区子句。
  2. 间隔分区

    范围分区允许您根据分区键列的值的范围创建分区。比如,定义了一个按时间的范围分区,less than 2007-02-01。这样当我们插入2007-02-01时间以后的数据时会发生错误。而在范围分区后使用间隔分区定义比如一个月【interval (numtoyminterval(1,'MONTH'))】,这时插入2007-02-01以后的数据时Oracle会自动创建一个新的分区进行存储。
  3. 系统分区

    如果一个表不能以任何逻辑方式进行分区,那么系统分区将提供惊人的优势。它们使您能够利用分区的优势,同时允许开发人员自由决定记录将进入哪个分区。

  4. 扩展的组合分区

    在11g之前只支持Range-Hash,Range-List两种范围分区,而在11g中并不局限于范围-散列和范围-列表组合分区。您的选择实际上没有任何限制;您可以使用任何组合创建组合分区,如范围-范围 ,范围-散列 ,范围-列表 ,列表-范围 ,列表-散列 ,列表-列表。

以上是对分区类型的总结,可以方便有针对性的进行学习查找。下面总结一些常用的分区操作:

增加分区:ALTER TABLE TABLE_NAME ADD PARTITION P_NEW1 VALUES LESS THAN (范围定义) TABLESPACE TS_NEW;

删除不必要的分区: ALTER TABLE TABLE_NAME DROP PARTITION partition_name ;

分区合并:ALTER TABLE TABLE_NAME MERGE PARTITIONS partition_name1 , partition_name2 INTO PARTITION P_ALL

拆分分区: ALTER TABLE TABLE_NAME SPLIT PARTITION partition_name AT (范围定义) INTO (partition_name_1 TABLESPACE TS_1, PARTITION partition_name_2 TABLESPACE TS_2);

分区改名: ALTER TABLE TABLE_NAME RENAME PARTITION partition_name1 TO partition_name2 ;

将分区改表空间:

ALTER TABLE TABLE_NAME MOVE PARTITION partition_name TABLESPACE TS_NAME;
分区的EXPORT:EXP SALES/SALES_PASSWORD TABLES=BB_SERVICE_RELATION_T:PART_089 ROWS=Y

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多