您好,欢迎访问一九零五行业门户网

Oralce水平分表

工作中遇到一张表每天都插入很多数据,随着时间的推移数据量会变的很大上百万条甚至上千万条记录。这样我们能不能把表进行拆分呢,答案是肯定的oracle 很早就考虑到这个问题提供了水平拆分。 oracle 10 g 中提供下面三中分区: 1)范围分区(range partition)
工作中遇到一张表每天都插入很多数据,随着时间的推移数据量会变的很大上百万条甚至上千万条记录。这样我们能不能把表进行拆分呢,答案是肯定的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:\oracle\product\10.2.0\oradata\wlkp\wlkp_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_kj
4.将老表wlkp_fp_kj 删除
5.重命名wlkp_fp_kj_test 为wlkp_fp_kj
这样通过以上方式我们可以讲原来wlkp_fp_kj 按照时间水平分割存储到不同的表空间了.
通过分区表查询数据分别存储在哪个分区表中.
select * from wlkp_fp_kj partition(wlkp_fp_data_2011) ;
其它类似信息

推荐信息