视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Oralce水平分表
2020-11-09 09:41:17 责编:小采
文档


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

下载本文
显示全文
专题