Heim >Datenbank >MySQL-Tutorial >Oralce水平分表

Oralce水平分表

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOriginal
2016-06-07 17:59:211089Durchsuche

工作中遇到一张表每天都插入很多数据,随着时间的推移数据量会变的很大上百万条甚至上千万条记录。这样我们能不能把表进行拆分呢,答案是肯定的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) ;

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn