- 浏览: 252674 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (298)
- 工作感悟 (6)
- java基础 (23)
- 计算机硬件知识 (1)
- 计算机网络知识 (2)
- Struts (3)
- Srping (4)
- hibernate (0)
- ibatis (0)
- webservice (4)
- Thread (22)
- maven (5)
- ubuntu/linux/centos/redhat (46)
- SSO (1)
- ESB (0)
- 工作流 (0)
- oracle (15)
- 云计算 (1)
- hadoop (1)
- nosql (0)
- mysql (3)
- sqlserver (0)
- jquery (0)
- 分布式 (3)
- 集群 (0)
- 设计模式 (2)
- EJB (0)
- map (0)
- cache (5)
- Niginx+varnish+squid+Ats (14)
- Apache (0)
- 工作/职业规划 (0)
- Scala & Groovy (1)
- English (4)
- 数据结构/算法 (6)
- 开发工具 (5)
- 测试 (2)
- Exception (0)
- 定时器 (3)
- j2ee (2)
- 部署 (1)
- Openssl (1)
- 操作系统 (3)
- kvm (13)
- libvirt (5)
- PostgreSql (5)
- 虚拟化 (3)
- 概念理解 (1)
- virt-manager (1)
- RESTful (3)
- 其它 (4)
- ssh2 (14)
- windows (1)
- 房产 (2)
- svn (1)
- 手机 (1)
- ant (1)
- flume (2)
- sqoop (1)
- fastdfs (5)
- log4j (1)
- SPDY (1)
- mongodb (2)
- MQ (2)
- Mina (1)
- dubbo (4)
- PMP (1)
- Webshpere (2)
- jvm (1)
- Btrace (1)
- zookeeper (7)
- UML (1)
- spring cloud (6)
- spring boot (5)
- storm (0)
- 软件管理 (1)
- elasticsearch (1)
- 协议 (2)
- docker (1)
- 性能 (2)
- 安全 (1)
- 代码规范 (1)
- mqtt (1)
- lombok (1)
- 车联网 (1)
- kafka (1)
最新评论
1创建和使用分区表
Oracle分区表分为四类:范围分区表;列表分区表;哈希分区表;组合分区表
范围分区表
创建一个按字段数据范围分区的表,分区置于指定的不同表空间中
示例代码:
--为各个分区准备独立的表空间
create tablespace test_space01 datafile‘d:/tbs01.dbf’ size 50m
create tablespace test_space02 datafile‘d:/tbs02.dbf’ size 50m
create tablespace test_space03 datafile‘d:/tbs03.dbf’ size 50m
create tablespace test_space04 datafile‘d:/tbs04.dbf’ size 50m
--创建分区表,
CREATE TABLE range_example(
range_key_column DATE,
DATA VARCHAR2(20),
ID integer
)
PARTITION BY RANGE(range_key_column)
(
PARTITION part01 VALUES LESS THAN(TO_DATE('2008-07-01 00:00:00','yyyy-mm-dd hh24:mi:ss')) TABLESPACEtest_space01,
PARTITION part02 VALUES LESS THAN(TO_DATE('2008-08-01 00:00:00','yyyy-mm-dd hh24:mi:ss')) TABLESPACE test_space02,
PARTITION part03 VALUES LESS THAN(TO_DATE('2008-09-01 00:00:00','yyyy-mm-dd hh24:mi:ss')) TABLESPACE test_space03,
PARTITION part04 VALUES LESS THAN (MAXVALUE)TABLESPACE test_space04
);
--插入测试数据
insert into range_examplevalues(TO_DATE('2008-06-10 00:00:00','yyyy-mm-dd hh24:mi:ss'), '1111', 1);
insert into range_examplevalues(TO_DATE('2008-07-20 00:00:00','yyyy-mm-dd hh24:mi:ss'), '2222', 2);
insert into range_examplevalues(TO_DATE('2008-08-25 00:00:00','yyyy-mm-dd hh24:mi:ss'), '3333', 3);
commit;
--在表上执行查询
select * from range_example;
--在表分区上执行查询
select * from range_example partition(part01);
列表分区表
创建一个按字段数据列表固定可枚举值分区的表。插入记录分区字段的值必须在列表中,否则不能被插入。
示例代码:
CREATE TABLE list_example(
dnameVARCHAR2(10),
DATA VARCHAR2(20)
)
PARTITION BY LIST(dname)
(
PARTITION part01VALUES('初始登记','转移登记'),
PARTITION part02 VALUES('更名登记','楼盘变更'),
PARTITION part03 VALUES('抵押登记'),
PARTITION part03 VALUES('限制登记')
);
哈希分区表
创建一个按字段数据Hash值分区的表
示例代码:
CREATE TABLE hash_example(
hash_key_column DATE,
DATA VARCHAR2(20)
)
PARTITION BY HASH(hash_key_cloumn)
(
PARTITION part01,
PARTITION part02
);
组合分区表
在分区中可以再建立子分区,以实现分区组合。可任意对上述各类分区进行组合分区。
此例中创建了一个由范围分区和哈希分区组合实现分区的表。
示例代码:
CREATE TABLE range_hash_example(
range_column_key int,
hash_column_key INT,
DATAVARCHAR2(20)
)
PARTITION BY RANGE(range_column_key)
SUBPARTITION BY HASH(hash_column_key)SUBPARTITIONS 2
(
PARTITION part_1 VALUES LESS THAN (100000000)
(
SUBPARTITION part_1_sub_1,
SUBPARTITION part_1_sub_2,
SUBPARTITION part_1_sub_3
),
PARTITION part_2 VALUES LESS THAN (200000000)
(
SUBPARTITION part_2_sub_1,
SUBPARTITION part_2_sub_2
)
);
--注 subpartitions 2 并不是指定subpartition的个数一定为2,实际上每个分区的子分区个数可以不同。如果不指定subpartition的具体明细,则系统按照subpartitions的值指定subpartition的个数生成子分区,名称由系统定义 。
2增加表分区
-- range partitioned table
ALTER TABLE range_example ADD PARTITIONpart04 VALUES LESS THAN (TO_DATE('2008-10-1 00:00:00','yyyy-mm-ddhh24:mi:ss'));
--list partitioned table
ALTER TABLE list_example ADD PARTITIONpart04 VALUES ('TE');
--Adding Values for a List Partition
ALTER TABLE list_example MODIFY PARTITION part04 ADD VALUES('MIS');
--Dropping Values from a List Partition
ALTER TABLE list_example MODIFY PARTITION part04 DROP VALUES('MIS');
--hash partitioned table
ALTER TABLE hash_example ADD PARTITIONpart03;
--增加subpartition
ALTER TABLE range_hash_example MODIFY PARTITIONpart_1 ADD SUBPARTITION part_1_sub_4;
注:hash partitioned table 新增partition时,现有表的中所有data都有重新计算hash值,然后重新分配到分区中。所以被重新分配的分区的 indexes需要rebuild 。
3删除分区
ALTER TABLE ... DROP PARTITION part_name;
4分区合并
合并父分区
ALTER TABLE range_example MERGE PARTITIONSpart01_1, part01_2 INTO PARTITION part01 UPDATE INDEXES;
--如果省略update indexes子句的话,必须重建受影响的分区的index;
ALTER TABLE range_example MODIFY PARTITIONpart02 REBUILD UNUSABLE LOCAL INDEXES;
合并子分区
ALTER TABLE composite_example
MERGE SUBPARTITIONS part_1_sub_2, part_1_sub_3INTO SUBPARTITION part_1_sub_2 UPDATE INDEXES;
5转换分区
可以将分区表转换成非分区表,或者几种不同分区表之间的转换。
如下:
CREATE TABLE hash_part02 AS SELECT * FROMhash_example WHERE 1=2;
ALTER TABLE hash_example EXCHANGE PARTITIONpart02 WITH TABLE hash_part02;
这时,分区表hash_example中的part02分区的资料将被转移到hash_part02这个非分区表中。
6关于分区表和索引
在分区表上可以建立三种类型的索引:1和普通表一样的全局索引;2.全局分区索引;3.本地分区索引。
它们之间的区别如下图示:
以表range_example为例。
1.建立普通的索引
create index com_index_range_example_id onrange_example(id);
2.建立本地分区索引
create index local_index_range_example_id onrange_example(id) local;
3.建立全局分区索引
create index gidx_range_exampel_id onrange_example(id)
GLOBAL partition by range(id)
(
part_01 values less than(1000),
part_02 values less than(MAXVALUE)
);
对于分区索引的删除,local index 不能指定分区名称,单独的删除分区索引。
local index 对应的分区会伴随着data分区的删除而一起被删除。globalpartition index 可以指定分区名称,删除某一分区。但是有一点要注意,如果该分区不为空,则会导致更高一级的索引分区被置为UNUSABLE 。
ALTER INDEX gidx_range_exampel_id drop partition part_01 ; 此句将导致part_02 状态为UNUSABLE
Oracle分区表分为四类:范围分区表;列表分区表;哈希分区表;组合分区表
范围分区表
创建一个按字段数据范围分区的表,分区置于指定的不同表空间中
示例代码:
--为各个分区准备独立的表空间
create tablespace test_space01 datafile‘d:/tbs01.dbf’ size 50m
create tablespace test_space02 datafile‘d:/tbs02.dbf’ size 50m
create tablespace test_space03 datafile‘d:/tbs03.dbf’ size 50m
create tablespace test_space04 datafile‘d:/tbs04.dbf’ size 50m
--创建分区表,
CREATE TABLE range_example(
range_key_column DATE,
DATA VARCHAR2(20),
ID integer
)
PARTITION BY RANGE(range_key_column)
(
PARTITION part01 VALUES LESS THAN(TO_DATE('2008-07-01 00:00:00','yyyy-mm-dd hh24:mi:ss')) TABLESPACEtest_space01,
PARTITION part02 VALUES LESS THAN(TO_DATE('2008-08-01 00:00:00','yyyy-mm-dd hh24:mi:ss')) TABLESPACE test_space02,
PARTITION part03 VALUES LESS THAN(TO_DATE('2008-09-01 00:00:00','yyyy-mm-dd hh24:mi:ss')) TABLESPACE test_space03,
PARTITION part04 VALUES LESS THAN (MAXVALUE)TABLESPACE test_space04
);
--插入测试数据
insert into range_examplevalues(TO_DATE('2008-06-10 00:00:00','yyyy-mm-dd hh24:mi:ss'), '1111', 1);
insert into range_examplevalues(TO_DATE('2008-07-20 00:00:00','yyyy-mm-dd hh24:mi:ss'), '2222', 2);
insert into range_examplevalues(TO_DATE('2008-08-25 00:00:00','yyyy-mm-dd hh24:mi:ss'), '3333', 3);
commit;
--在表上执行查询
select * from range_example;
--在表分区上执行查询
select * from range_example partition(part01);
列表分区表
创建一个按字段数据列表固定可枚举值分区的表。插入记录分区字段的值必须在列表中,否则不能被插入。
示例代码:
CREATE TABLE list_example(
dnameVARCHAR2(10),
DATA VARCHAR2(20)
)
PARTITION BY LIST(dname)
(
PARTITION part01VALUES('初始登记','转移登记'),
PARTITION part02 VALUES('更名登记','楼盘变更'),
PARTITION part03 VALUES('抵押登记'),
PARTITION part03 VALUES('限制登记')
);
哈希分区表
创建一个按字段数据Hash值分区的表
示例代码:
CREATE TABLE hash_example(
hash_key_column DATE,
DATA VARCHAR2(20)
)
PARTITION BY HASH(hash_key_cloumn)
(
PARTITION part01,
PARTITION part02
);
组合分区表
在分区中可以再建立子分区,以实现分区组合。可任意对上述各类分区进行组合分区。
此例中创建了一个由范围分区和哈希分区组合实现分区的表。
示例代码:
CREATE TABLE range_hash_example(
range_column_key int,
hash_column_key INT,
DATAVARCHAR2(20)
)
PARTITION BY RANGE(range_column_key)
SUBPARTITION BY HASH(hash_column_key)SUBPARTITIONS 2
(
PARTITION part_1 VALUES LESS THAN (100000000)
(
SUBPARTITION part_1_sub_1,
SUBPARTITION part_1_sub_2,
SUBPARTITION part_1_sub_3
),
PARTITION part_2 VALUES LESS THAN (200000000)
(
SUBPARTITION part_2_sub_1,
SUBPARTITION part_2_sub_2
)
);
--注 subpartitions 2 并不是指定subpartition的个数一定为2,实际上每个分区的子分区个数可以不同。如果不指定subpartition的具体明细,则系统按照subpartitions的值指定subpartition的个数生成子分区,名称由系统定义 。
2增加表分区
-- range partitioned table
ALTER TABLE range_example ADD PARTITIONpart04 VALUES LESS THAN (TO_DATE('2008-10-1 00:00:00','yyyy-mm-ddhh24:mi:ss'));
--list partitioned table
ALTER TABLE list_example ADD PARTITIONpart04 VALUES ('TE');
--Adding Values for a List Partition
ALTER TABLE list_example MODIFY PARTITION part04 ADD VALUES('MIS');
--Dropping Values from a List Partition
ALTER TABLE list_example MODIFY PARTITION part04 DROP VALUES('MIS');
--hash partitioned table
ALTER TABLE hash_example ADD PARTITIONpart03;
--增加subpartition
ALTER TABLE range_hash_example MODIFY PARTITIONpart_1 ADD SUBPARTITION part_1_sub_4;
注:hash partitioned table 新增partition时,现有表的中所有data都有重新计算hash值,然后重新分配到分区中。所以被重新分配的分区的 indexes需要rebuild 。
3删除分区
ALTER TABLE ... DROP PARTITION part_name;
4分区合并
合并父分区
ALTER TABLE range_example MERGE PARTITIONSpart01_1, part01_2 INTO PARTITION part01 UPDATE INDEXES;
--如果省略update indexes子句的话,必须重建受影响的分区的index;
ALTER TABLE range_example MODIFY PARTITIONpart02 REBUILD UNUSABLE LOCAL INDEXES;
合并子分区
ALTER TABLE composite_example
MERGE SUBPARTITIONS part_1_sub_2, part_1_sub_3INTO SUBPARTITION part_1_sub_2 UPDATE INDEXES;
5转换分区
可以将分区表转换成非分区表,或者几种不同分区表之间的转换。
如下:
CREATE TABLE hash_part02 AS SELECT * FROMhash_example WHERE 1=2;
ALTER TABLE hash_example EXCHANGE PARTITIONpart02 WITH TABLE hash_part02;
这时,分区表hash_example中的part02分区的资料将被转移到hash_part02这个非分区表中。
6关于分区表和索引
在分区表上可以建立三种类型的索引:1和普通表一样的全局索引;2.全局分区索引;3.本地分区索引。
它们之间的区别如下图示:
以表range_example为例。
1.建立普通的索引
create index com_index_range_example_id onrange_example(id);
2.建立本地分区索引
create index local_index_range_example_id onrange_example(id) local;
3.建立全局分区索引
create index gidx_range_exampel_id onrange_example(id)
GLOBAL partition by range(id)
(
part_01 values less than(1000),
part_02 values less than(MAXVALUE)
);
对于分区索引的删除,local index 不能指定分区名称,单独的删除分区索引。
local index 对应的分区会伴随着data分区的删除而一起被删除。globalpartition index 可以指定分区名称,删除某一分区。但是有一点要注意,如果该分区不为空,则会导致更高一级的索引分区被置为UNUSABLE 。
ALTER INDEX gidx_range_exampel_id drop partition part_01 ; 此句将导致part_02 状态为UNUSABLE
发表评论
-
tomcat 数据源集群配置
2016-05-10 20:44 457jdbc:oracle:thin:@(DESCRIPTION= ... -
使用ORACLE自带工具sqlload导入文本文件
2014-07-17 13:36 719Dos 环境下使用SQl*Loader ... -
Oracle append有什么用
2014-07-17 13:27 804/*+append*/ 1. append 属于dire ... -
ORACLE锁机制
2013-08-22 10:11 578数据库是一个多用户使 ... -
Java中JDBC事务和JTA事务区别
2013-08-08 17:15 1346一、事务概述 事务表示 ... -
oracle hints用法大全
2013-07-16 10:52 745在向大家详细介绍Oracle ... -
oracle translate() 详解+实例
2013-07-08 14:58 667一、语法: TRANSLATE(strin ... -
oracle联合查询
2013-05-22 15:15 675等值连接 select * from books,books ... -
oracle锁表问题
2013-05-21 10:38 625oracle锁表问题 查询表 ... -
oracle中insert,copy,insert append执行对比
2013-04-09 13:20 777oracle中insert,copy,insert appen ... -
Oracle的表压缩
2013-04-09 11:09 694Oracle压缩数据的处 ... -
Oracle读写分离架构
2013-04-09 10:30 775读写分离是架构分布式 ... -
ORACLE 各种PARTITION 的分析(原)
2013-04-07 13:34 858总结自ORACLE官方在线帮助文档。 ORACLE 为构建 ... -
oracle常用语法和语句收藏
2013-03-22 10:08 7371.case when 示例 select ta ...
相关推荐
oracle 分区表管理oracle 分区表管理oracle 分区表管理oracle 分区表管理oracle 分区表管理
如何创建,管理分区,分区索引。
Oracle分区表的使用,简洁明了。 在大量业务数据处理的项目中,可以考虑使用分区表来提高应用系统的性能并方便数据管理,本文详细介绍了分区表的使用。
-- @PARAM 即已经分好区的分区表是不能够使用交换分区的方法转换为另一种分区表的; -- @PARAM VARCHAR2 DROPPABLE-------取值范围为(TRUE,FALSE),指定分区完后是否DROP掉分区备份表; 其中参数FIELDFORMAT的取值范围...
Oracle表分区和索引分区 分区概述 为了简化数据库大表的管理,例如在数据仓库中一般都是TB级的数量级.ORACLE8以后推出了分区选项.分区将表分离在若于不同的表空间上,用分而治之的方法来支撑元限膨胀的大表,组...
Oracle分区表_(Partition_Table)_的创建及管理.doc
这份“Oracle甲骨文原厂分区表最佳实践”是一份非常实用的资源,它提供了关于如何在Oracle数据库中最好地使用分区表的建议和指南。该资源详细介绍了分区表的设计和实现,包括如何选择分区键、如何分区、如何维护分区...
分区对SQL和DML是透明的(应用程序不必知道已经作了分区),但是DDL可以对不同的分区进行管理。 不同的分区之间必须有相同的逻辑属性,比如共同的表名,列名,数据类型,约束; 但是可以有不同的物理属性,比如...
在大量业务数据处理的项目中,可以考虑使用分区表来提高应用系统的性能并方便数据管理,本文详细介绍了分区表的使用。
在大型的企业应用或企业级的数据库应用中,要处理的数据量通常可以达到几十到几百 GB,有的甚至...在大量业务数据处理的项目中,可以考虑使用分区表来提高应用系统的性能并方便数据管理,本文详细介绍了分区表的使用。
关于ORACLE分区表的管理教程 使用适当的存储设置创建表 控制表占用的空间 分析表以检查完整性和移植 从数据字典中检索有关表的信息 在不同格式的 ROWID 之间转换
为了简化数据库大表的管理,例如在数据仓库中一般都是TB级的数量级.ORACLE8以后推出了分区选项.分区将表分离在若于不同的表空间上,用分而治之的方法来支撑元限膨胀的大表,组大表在物理一级的可管理性.将大表分割成较...
Oracle表分区管理.pdf
但是,从应用程序的角度来看,分区后的表与非分区表完全相同,使用 SQL DML 命令访问分区后的表时,无需任何修改。(对于高效率查询是有影响,主要差别是对某一分区数据时行查询时和对整体数据进行查询)
《Oracle分区技术和11g分区新特性》,53页,解决大表问题 为何要数据分区(Data Partitioning) • 表与索引数据的爆炸性增长 • 在大型数据库系统中 表数据量通常 >> 10GB • 现在表的数据量比以前中等规模的数据库...
分区致力于解决支持极大表和索引的关键问题。它采用他们分解成较小和易于管理的称为分区的片(piece)的方法。
Oracle10g表分区技术管理.pdf
Oracle虽然是一个大型的DBMS,但如果不对记录比较多的表进行处理,仍然发挥不了Oracle管理大型数据的强大功能,因此对某些表进行分区,具有如下优点: 分区表中每个分区可以在逻辑上认为是一个独立的对象;...
常用的分区表所具有的优点:如提高数据可用行,减少管理负担,改善语句性能等优点,hash分区同样拥有。此外,由于Hash分区表是按分区键的hash计算结果来决定其分区的,而特定的分区键其hash值是固定的,也就是说Hash...