工作中遇到一张表每天都插入很多数据,随着时间的推移数据量会变的很大上百万条甚至上千万条记录。这样我们能不能把表进行拆分呢,答案是肯定的oracle 很早就考虑到这个问题提供了水平拆分。
oracle 10 g 中提供下面三中分区:
1)范围分区(Range partition)
2) 哈希分区(Hash partition)
3)列表分区(List partition)
由于水平有限下面重点介绍范围分区
范围分区,顾名思义,就是根据表的某个字段的值,以固定的一个范围作为一个分区来划分数据
1.1可以根据序号分区建表
create table test1
(
ID NUMBER not null,
JQBH VARCHAR2(20),
FJH VARCHAR2(20)
)
partition by range (ID)
(
partition part_01 values less than(30000000) tablespace WLKP_FP_DATA_2011,
partition part_02 values less than(60000000) tablespace WLKP_FP_DATA_2012,
partition part_03 values less than(maxvalue) tablespace WLKP_FP_DATA_2013
);
从上面我们看出按照序号分区1-30000000数据存储在part_01分区表中,30000000-60000000数据存储在第part_02分区表中。这样就达到水平拆分表的目的
1.2可以根据日期分区建表
create table test2
(
ID NUMBER not null,
JQBH VARCHAR2(20),
FJH VARCHAR2(20),
KPRQ DATE
)
partition by range (KPRQ)
(
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,
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,
partition part_03 values less than(MAXVALUE) tablespace WLKP_FP_DATA_2013
);
从上面建表语句我们可以看到通过时间按照年存储数据表。
通过以上方式以上方式我们可以将数据比较大的表根据ID 时间自动拆分的其他分区表中。
以上方式在系统设计表结构的时候就考虑到分表情况,实际工作中由于对系统数据量的遇见不足,没有在设计表的时候考虑的表水平切分情况。那么我们有没有办法对现有表进行拆分和改造呢。答案是肯定的。
现在对表WLKP_FP_KJ进行扩展改造
1.创建新表空间
CREATE TABLESPACE "WLKP_FP_DATA_2010"
LOGGING
DATAFILE 'E:\oracle\product\10.2.0\oradata\wlkp\WLKP_FP_DATA_2010.ORA'
SIZE 5M REUSE AUTOEXTEND
ON NEXT 1024K MAXSIZE 32767M EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT AUTO ;
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) ;
分享到:
相关推荐
kettle对数据分表插入 数据库Oracle etl工具 kettle 通过java脚本,hash算法,实现分表数据写入
平切分,分库,分表,主从,集群 数据库水平切分的实现原理解析
在这种情况下,无论是海量的结构化数据还是快速成长的业务规模,都迫切需要一种水平扩展的方法将存储成本分摊到成本可控的商用服务器上。同时,也希望通过线性扩容降低全量数据迁移对线上服务带来的影响,分库分表...
其核心功能是分表分库,即将一个大表水平分割为 N 个小表,存储在后端 MySQL 服务器里或者其他数据库里。 Mycat 发展到目前的版本,已经不是一个单纯的 MySQL 代理了,它的后端可以支持 MySQL、SQL Server、 Oracle...
c: 分表技术(水平分割、垂直分割) d: 读写[写: update/delete/add]分离 e: 存储过程 [模块化编程,可以提高速度] f: 对mysql配置优化 [配置最大并发数my.ini, 调整缓存大小 ] g: mysql服务器硬件升级 h: 定时的去...
也可以用JDBC协议与大多数主流数据库服务器通信,其核心功能是分表分库,即将一个大表水平分割为N个小表,存储在后端MySQL服务器里或者其他数据库里。 Mycat发展到目前的版本,已经不是一个单纯的MySQL代理了,它...
它们均提供标准化的数据水平扩展、分布式事务和分布式治理等功能,可适用于如 Java 同构、异构语言、云原生等各种多样化的应用场景。 目前支持数据分片、读写分离、数据加密、影子库压测等功能,以及支持 MySQL、...
水平伸缩 集群 分片 Key-hash 异步 一致性hash 消峰 分库分表 锁 悲观锁 乐观锁 行级锁 分布式锁 分区排队 一致性 一致性算法 paxos zab nwr raft gossip 柔性事务(TCC) 一致性原理 CAP ...
ef-orm A Simple OR-Mapping framework on multiple databases. ... EF-ORM是一个轻量,便捷的Java ORM框架。并且具备若干企业级的... SQL分析,性能统计,分库分表,Oracle RAC支持,读写分离支持 标签:eform
通过调用数据访问代理服务,实现分库分表环境下的数据透明访问,支持底层数据库的水平扩展。 1.2.2LEAF6平台总体架构 LEAF6平台核心框架定义控制层、业务层、数据访问层的命名方式和实现规则,制定了分布式缓存、...