首页 > 数据库 > Oracle > oracle --- 海量数据存储二(分区表)
实际应用中,若是表中数据量特别大,可以采用分区表/索引分区来存储数据。
1 查看是否支持分区功能,TRUE为支持,FALSE为不支持。
select * from v$option where parameter='Partitioning';
2 Range Partitioning(范围分区)
范围分区是对数据表中的某个值的范围进行分区,根据某个值的范围,决定将该数据存储在哪个分区上,如根据城市分区,根据时间进行分区等。实现方法就是在create table命令中增加partition by range子句。
create table anne_test
(
)
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
PARTITION BY HASH (test_ID)
散列分区的特点
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
列表分区特点
a List分区通过对分区字段的离散值进行分区。
b List分区适合于对数据离散值进行控制。
c List分区只支持单个字段。
d List分区具有与范围分区相似的优缺点
5 Composite Partitioning(复合分区)
复合分区支持Range-Hash,Range-List。只有子分区是从物理上创建,主分区只是逻辑上的表示。
CREATE TABLE compose_test
PARTITION BY
RANGE(DEPTNO)
SUBPARTITION BY HASH(EMPNAME) SUBPARTITIONS 2
(PARTITION P1 VALUES LESS THAN
(1000),
PARTITION P3 VALUES LESS THAN (MAXVALUE)
(SUBPARTITION P3_S1 TABLESPACE BSNL2010_INDEX,
复合分区的特点
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
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:
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/22313942/viewspace-1116666/ ,如需转载,请注明出处,否则将追究法律责任。