设为首页 加入收藏

TOP

Oracle表空间表分区详解及Oracle表分区查询使用方法(二)
2019-09-14 00:53:19 】 浏览:48
Tags:Oracle 空间 分区 详解 查询 使用方法
MARY KEY ,
 name VARCHAR (20),
 area VARCHAR (10)
 )
 PARTITION BY LIST (area)
 (
 PARTITION part1 VALUES ('guangdong','beijing') TABLESPACE Part1_tb,
 PARTITION part2 VALUES ('shanghai','nanjing') TABLESPACE Part2_tb
 );
 )
散列分区:
 这类分区是在列值上使用散列算法,以确定将行放入哪个分区中。当列的值没有合适的条件时,建议使用散列分区。
 散列分区为通过指定分区编号来均匀分布数据的一种分区类型,因为通过在I/O设备上进行散列分区,使得这些分区大小一致。
 例一:


CREATE TABLE HASH_TABLE
 (
 COL NUMBER(8),
 INF VARCHAR2(100)
 )
 PARTITION BY HASH (COL)
 (
 PARTITION PART01 TABLESPACE HASH_TS01,
 PARTITION PART02 TABLESPACE HASH_TS02,
 PARTITION PART03 TABLESPACE HASH_TS03
 )
简写:


CREATE TABLE emp
 (
 empno NUMBER (4),
 ename VARCHAR2 (30),
 sal NUMBER
 )
 PARTITION BY HASH (empno) PARTITIONS 8
 STORE IN (emp1,emp2,emp3,emp4,emp5,emp6,emp7,emp8);
 hash分区最主要的机制是根据hash算法来计算具体某条纪录应该插入到哪个分区中,hash算法中最重要的是hash函数,Oracle中如果你要使用hash分区,只需指定分区的数量即可。建议分区的数量采用2的n次方,这样可以使得各个分区间数据分布更加均匀。


组合范围散列分区
 这种分区是基于范围分区和列表分区,表首先按某列进行范围分区,然后再按某列进行列表分区,分区之中的分区被称为子分区。


CREATE TABLE SALES
 (
 PRODUCT_ID VARCHAR2(5),
 SALES_DATE DATE,
 SALES_COST NUMBER(10),
 STATUS VARCHAR2(20)
 )
 PARTITION BY RANGE(SALES_DATE) SUBPARTITION BY LIST (STATUS)
 (
 PARTITION P1 VALUES LESS THAN(TO_DATE('2003-01-01','YYYY-MM-DD'))TABLESPACE rptfact2009
 (
 SUBPARTITION P1SUB1 VALUES ('ACTIVE') TABLESPACE rptfact2009,
 SUBPARTITION P1SUB2 VALUES ('INACTIVE') TABLESPACE rptfact2009
 ),
 PARTITION P2 VALUES LESS THAN (TO_DATE('2003-03-01','YYYY-MM-DD')) TABLESPACE rptfact2009
 (
 SUBPARTITION P2SUB1 VALUES ('ACTIVE') TABLESPACE rptfact2009,
 SUBPARTITION P2SUB2 VALUES ('INACTIVE') TABLESPACE rptfact2009
 )
 )
复合范围散列分区:
 这种分区是基于范围分区和散列分区,表首先按某列进行范围分区,然后再按某列进行散列分区。


create table dinya_test
 (
 transaction_id number primary key,
 item_id number(8) not null,
 item_description varchar2(300),
 transaction_date date
 )
 partition by range(transaction_date)subpartition by hash(transaction_id) subpartitions 3 store in (dinya_space01,dinya_space02,dinya_space03)
 (
 partition part_01 values less than(to_date(‘2006-01-01','yyyy-mm-dd')),
 partition part_02 values less than(to_date(‘2010-01-01','yyyy-mm-dd')),
 partition part_03 values less than(maxvalue)
 );
有关表分区的一些维护性操作:
 添加分区
 以下代码给SALES表添加了一个P3分区


ALTER TABLE SALES ADD PARTITION P3 VALUES LESS THAN(TO_DATE('2003-06-01','YYYY-MM-DD'));
注意:以上添加的分区界限应该高于最后一个分区界限。


以下代码给SALES表的P3分区添加了一个P3SUB1子分区


ALTER TABLE SALES MODIFY PARTITION P3 ADD SUBPARTITION P3SUB1 VALUES('COMPLETE');
删除分区
 以下代码删除了P3表分区:


ALTER TABLE SALES DROP PARTITION P3;
在以下代码删除了P4SUB1子分区:


ALTER TABLE SALES DROP SUBPARTITION P4SUB1;
注意:如果删除的分区是表中唯一的分区,那么此分区将不能被删除,要想删除此分区,必须删除表。


截断分区
 截断某个分区是指删除某个分区中的数据,并不会删除分区,也不会删除其它分区中的数据。当表中即使只有一个分区时,也可以截断该分区。通过以下代码截断分区:


ALTER TABLE SALES TRUNCATE PARTITION P2;
通过以下代码截断子分区:


ALTER TABLE SALES TRUNCATE SUBPARTITION P2SUB2;
合并分区
 合并分区是将相邻的分区合并成一个分区,结果分区将采用较高分区的界限,值得注意的是,不能将分区合并到界限较低的分区。以下代码实现了P1 P2分区的合并:


ALTER TABLE SALES MERGE PARTITIONS P1,P2 INTO PARTITION P2;
拆分分区
 拆分分区将一个分区拆分两个新分区,拆分后原来分区不再存在。注意不能对HASH类型的分

首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇删除表空间时报ORA-00604、ORA-38.. 下一篇Redis常见面试题分享

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目