Welcome 微信登录

首页 / 数据库 / MySQL / Oralce水平分表

工作中遇到一张表每天都插入很多数据,随着时间的推移数据量会变的很大上百万条甚至上千万条记录。这样我们能不能把表进行拆分呢,答案是肯定的Oracle 很早就考虑到这个问题提供了水平拆分。oracle 10 g 中提供下面三中分区:1)范围分区(Range partition)2) 哈希分区(Hash  partition)3)列表分区(List partition)由于水平有限下面重点介绍范围分区范围分区,顾名思义,就是根据表的某个字段的值,以固定的一个范围作为一个分区来划分数据1.1可以根据序号分区建表create table test1
  1. (   
  2.   ID         NUMBER not null,   
  3.   JQBH       VARCHAR2(20),   
  4.   FJH        VARCHAR2(20)   
  5. )   
  6. partition by range (ID)   
  7. (   
  8.  partition part_01 values less than(30000000) tablespace WLKP_FP_DATA_2011,   
  9.  partition part_02 values less than(60000000) tablespace WLKP_FP_DATA_2012,   
  10.  partition part_03 values less than(maxvalue) tablespace WLKP_FP_DATA_2013   
  11.  );  
从上面我们看出按照序号分区1-30000000数据存储在part_01分区表中,30000000-60000000数据存储在第part_02分区表中。这样就达到水平拆分表的目的1.2可以根据日期分区建表create table test2
  1. (   
  2.   ID         NUMBER not null,   
  3.   JQBH       VARCHAR2(20),   
  4.   FJH        VARCHAR2(20),   
  5.    KPRQ       DATE  
  6. )   
  7. partition by range (KPRQ)   
  8. (   
  9.  partition part_01 values less than(TO_DATE("2012-01-01 00:00:00""SYYYY-MM-DD HH24:MI:SS""NLS_CALENDAR=GREGORIAN")) tablespace WLKP_FP_DATA_2011,   
  10.  partition part_02 values less than(TO_DATE("2013-01-01 00:00:00""SYYYY-MM-DD HH24:MI:SS""NLS_CALENDAR=GREGORIAN")) tablespace WLKP_FP_DATA_2012,   
  11.  partition part_03 values less than(MAXVALUE) tablespace WLKP_FP_DATA_2013   
  12.  );  
从上面建表语句我们可以看到通过时间按照年存储数据表。通过以上方式以上方式我们可以将数据比较大的表根据ID 时间自动拆分的其他分区表中。以上方式在系统设计表结构的时候就考虑到分表情况,实际工作中由于对系统数据量的遇见不足,没有在设计表的时候考虑的表水平切分情况。那么我们有没有办法对现有表进行拆分和改造呢。答案是肯定的。现在对表WLKP_FP_KJ进行扩展改造1.创建新表空间CREATE TABLESPACE "WLKP_FP_DATA_2010"表空间创建代码
  1. LOGGING    
  2. DATAFILE "E:oracleproduct10.2.0oradatawlkpWLKP_FP_DATA_2010.ORA"    
  3. SIZE 5M REUSE AUTOEXTEND    
  4. ON NEXT  1024K MAXSIZE  32767M EXTENT MANAGEMENT LOCAL    
  5. SEGMENT SPACE MANAGEMENT  AUTO ;   
  6. commit;  
这里我们新建WLKP_FP_DATA_2010表空间,按照年来存储扩展WLKP_FP_KJ表当然也可以建立2011、2012、2013...表空间存储未来的数据2创建新表WLKP_FP_KJ_TEST表结构按照1.2日期分区建表3.新表建立后,复制老表数据insert into wlkp_fp_kj_test select* from wlkp_fp_kj4.将老表wlkp_fp_kj 删除5.重命名wlkp_fp_kj_test 为wlkp_fp_kj这样通过以上方式我们可以讲原来wlkp_fp_kj 按照时间水平分割存储到不同的表空间了.通过分区表查询数据分别存储在哪个分区表中.select * from WLKP_FP_KJ partition(WLKP_FP_DATA_2011) ;Oralce水平分表现有表再进行拆分Oracle索引技术之如何建立最佳索引相关资讯      Oralce水平分表  本文评论 查看全部评论 (0)
表情: 姓名: 字数