ITPub博客

首页 > 数据库 > Oracle > oracle --- 海量数据存储二(分区表)

oracle --- 海量数据存储二(分区表)

Oracle 作者:7709472 时间:2013-11-22 18:43:30 0 删除 编辑

实际应用中,若是表中数据量特别大,可以采用分区表/索引分区来存储数据。

 

1 查看是否支持分区功能,TRUE为支持,FALSE为不支持。

select * from v$option where parameter='Partitioning';

oracle <wbr>--- <wbr>海量数据存储二(分区表)

 

2 Range Partitioning(范围分区)

范围分区是对数据表中的某个值的范围进行分区,根据某个值的范围,决定将该数据存储在哪个分区上,如根据城市分区,根据时间进行分区等。实现方法就是在create table命令中增加partition by range子句。

create table anne_test
(
  test_id number(10) primary key,
  test_date date
)
tablespace BSNL2010_DATA
partition by range (test_date)
(partition g_2013q1 values less than
(to_date('2013-06-01','yyyy-mm-dd')),
partition g_2013q2 values less than
(to_date('2013-12-01','yyyy-mm-dd')));

 

范围分区的特点
a Range分区特别适合于按时间周期进行数据的存储。日、周、月、年等。
b 数据管理能力强,可以进行数据迁移,数据备份以及数据交换的操作。
c 范围分区的数据可能分布不均匀。
d 范围分区与记录值相关,实施难度和可维护性相对较差。有可能出现一个表分成上万个分区,还可能出现后期拆分分区,增加分区的操作。

 

3 Hash Partitioning (散列分区)

散列分区为通过指定分区编号来均匀分布数据的一种分区类型,因为通过在I/O设备上进行散列分区,使得这些分区大小一致。在不知道一个范围内有多少数据的情况下使用散列分区可能更合适一些。

 
CREATE TABLE PARTITION_TEST
 (test_ID NUMBER,  
  NAME VARCHAR2 (60))  
PARTITION BY HASH (test_ID)
 PARTITIONS 2 
  STORE IN (BSNL2010_INDEX, BSNL2010_DATA);

散列分区的特点
a 基于分区字段的HASH值,自动将记录插入到指定分区。
b 易于实施。
c 总体性能最佳。
d 适合于静态数据。
e 数据存储均匀。
f 对数据值无法控制,数据管理能力弱

 

4 List Partitioning(列表分区)
如果已知将要存储在列中的所有的值,那么可以使用列表分区。列表分区对每一行怎么对应到一个分区给出了很明确的显示。而范围分区则控制的是一个值得范围如果对应到一个分区上。列表分区可以通过离散值较好的管理分区。


CREATE TABLE LOCATIONS 
(LOCATION_ID number(10) primary key, STATE_PROVINCE varchar(10)) 
TABLESPACE BSNL2010_DATA   
PARTITION BY LIST (STATE_PROVINCE)
(PARTITION REGION_EAST 
VALUES('MA','NY','CT','ME','MD'),
PARTITION REGION_WEST 
 VALUES('CA','AZ','NM','OR','WA'));

 

列表分区特点
a List分区通过对分区字段的离散值进行分区。
b List分区适合于对数据离散值进行控制。
c List分区只支持单个字段。
d List分区具有与范围分区相似的优缺点
 –数据管理能力强
 –数据可能不均匀
 –与记录值相关,实施难度和可维护性相对较差
 

5 Composite Partitioning(复合分区)

复合分区支持Range-Hash,Range-List。只有子分区是从物理上创建,主分区只是逻辑上的表示。

 

CREATE TABLE compose_test  (DEPTNO NUMBER,  EMPNAME VARCHAR(32),  GRADE NUMBER)  
PARTITION BY RANGE(DEPTNO)  
SUBPARTITION BY HASH(EMPNAME) SUBPARTITIONS 2  STORE IN (BSNL2010_INDEX, BSNL2010_DATA)  
(PARTITION P1 VALUES LESS THAN (1000),   
PARTITION P3 VALUES LESS THAN (MAXVALUE) 
(SUBPARTITION P3_S1 TABLESPACE BSNL2010_INDEX,  SUBPARTITION P3_S2 TABLESPACE BSNL2010_DATA));

 

复合分区的特点 
a Oracle支持的Composite分区(Range-Hash,Range-List)
b 既适合于历史数据,又适合于数据均匀分布
c 与范围分区一样提供高可用性和管理性

 

对分区表的维护和管理包括如下操作: 
1) 增加分区。 
ALTER TABLE TABLE_NAME ADD PARTITION P_NEW1 VALUES LESS THAN (200409) TABLESPACE TS_NEW; 

2) 删除不必要的分区。 
ALTER TABLE TABLE_NAME DROP PARTITION PART_OLD1; 

3) 分区合并。 
ALTER TABLE TABLE_NAME  MERGE PARTITIONS P_NEW1, P_NEW2 INTO PARTITION P_ALL
4) 拆分分区。 
ALTER TABLE TABLE_NAME SPLIT PARTITION P_200409 AT (200409) INTO (PARTITION P_200409_1 TABLESPACE TS_ZIKEN, PARTITION P_200409_2 TABLESPACE TS_ZIKEN_IDX); 

5) 分区改名。 
ALTER TABLE TABLE_NAME RENAME PARTITION P_1 TO P_2; 

6) 将分区改表空间。 
ALTER TABLE BILL_MONTHFEE_ZERO MOVE PARTITION P_200409 TABLESPACE TS_NEW; 

7) 分区的EXPORT。 
EXP SALES/SALES_PASSWORD TABLES=BB_SERVICE_RELATION_T:PART_089 ROWS=Y 

8) 分区的IMPORT。 
IMP SALES/SALES_PASSWORD FILE =SALES1999_Q1.DMP TABLES = (BB_SERVICE_RELATION_T:PART_089) IGNORE=Y 

9) 表的分区信息,可查看数据字典USER_EXTENTS。 
SELECT * FROM USER_EXTENTS WHERE SEGMENT_NAME=’BB_SERVICE_RELATION_T’; 

10) 表的清空。 
ALTER TABLE TABLE_NAME TRUNCATE PARTITION P_1; 

11) 分区的交换。 
ALTER TABLE T_NEW EXCHANGE PARTITION P1 WITH TABLE T;

reference:

http://wenku.baidu.com/view/1c7c250003d8ce2f006623f2.html

<!-- 正文结束 -->

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22313942/viewspace-1116666/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2009-08-10