分区表

摘自:http://wenku.baidu.com/view/a042798a680203d8ce2f24ac.html

 

一、分区表的分类

1、Range分区表(范围分区表)

     范围分区就是对数据表中的某个值的范围进行分区,根据某个值的范围,决定将该数据存储在哪个分区上。如根据序号分区,根据业务记录的创建日期进行分区等。 

2、Hash分区表(散列分区表)

     散列分区为通过指定分区编号来均匀分布数据的一种分区类型,因为通过在I/O设备上进行散列分区,使得这些分区大小一致。

3、List分区表(列表分区表)

     该分区的特点是某列的值只有几个,基于这样的特点我们可以采用列表分区。

4、Range—Hash分区表(范围—散列分区表)(复合分区表)

5、Range—List分区表(范围—列表分区表)(复合分区表)

二、创建分区表

1、创建范围分区表

create table Test_Table
(
ID integer not null,
Name nvarchar2(100) not null,
InsertedTime date not null
)
partition by range(InsertedTime)
(
partition Test_Table_Partition1 values less than(to_date('2013-09-06','yyyy-mm-dd')) tablespace Test_Tspace1,
partition Test_Table_Partition2 values less than(to_date('2013-10-06','yyyy-mm-dd')) tablespace Test_Tspace2,
partition Test_Table_Partition3 values less than(to_date('2013-11-06','yyyy-mm-dd')) tablespace Test_Tspace2
);

2、创建散列分区表

CREATE TABLE HASH_TABLE
(
  COL NUMBER(8),
  INF VARCHAR2(100)
)
PARTITION BY HASH(COL)
(
PARTITION PART01 TABLESPACE TEST_TSPACE1,
PARTITION PART02 TABLESPACE TEST_TSPACE2
);

可以简写为:

CREATE TABLE HASH_TABLE
(
  COL NUMBER(8),
  INF VARCHAR2(100)
)
PARTITION BY HASH(COL) PARTITIONS 2
STORE IN (TEST_TSPACE1,TEST_TSPACE2);

3、创建列表分区表

例1:

CREATE TABLE PROBLEM_TICKETS
(
    PROBLEM_ID   NUMBER(7) NOT NULL PRIMARY KEY,
    DESCRIPTION  VARCHAR2(2000),
    CUSTOMER_ID  NUMBER(7) NOT NULL,
    DATE_ENTERED DATE NOT NULL,
    STATUS       VARCHAR2(20)
)
PARTITION BY LIST(STATUS)
(
PARTITION PROB_ACTIVE VALUES('ACTIVE') TABLESPACE TEST_TSPACE1,
PARTITION PROB_INACTIVE VALUES('INACTIVE') TABLESPACE TEST_TSPACE2
);

例2:

CREATE  TABLE  ListTable
(
    id    INT  PRIMARY  KEY ,
    name  VARCHAR (20),
    area  VARCHAR (10)
)
PARTITION BY LIST(AREA)
(
PARTITION PART1 VALUES('guangdong','beijing')TABLESPACE TEST_TSPACE1,
PARTITION PART2 VALUES('shanghai','nianjing')TABLESPACE TEST_TSPACE2
);

4、创建范围—列表分区表

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('2013-09-07','YYYY-MM-DD')) TABLESPACE TEST_TSPACE1
  (
  SUBPARTITION P1SUB1 VALUES('ACTIVE') TABLESPACE TEST_TSPACE1,
  SUBPARTITION P1SUB2 VALUES('INACTIVE') TABLESPACE TEST_TSPACE1
  ),
  PARTITION P2 VALUES LESS THAN (TO_DATE('2013-10-07','YYYY-MM-DD')) TABLESPACE TEST_TSPACE2
  (
  SUBPARTITION P2SUB1 VALUES('ACTIVE') TABLESPACE TEST_TSPACE2,
  SUBPARTITION P2SUB2 VALUES('INACTIVE') TABLESPACE TEST_TSPACE2
  )
)

5、创建范围—散列分区表

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 2 store in (test_tspace1,test_tspace2)
(
partition part_01 values less than(to_date('2013-09-07','yyyy-mm-dd')),
partition part_02 values less than(to_date('2013-10-07','yyyy-mm-dd'))
);

 三、添加表分区

添加表分区:

注:以上添加的分区界限应该高于最后一个分区界限。

alter table sales
add partition p4
values less than (to_date('2013-12-07','yyyy-mm-dd')) tablespace test_tspace3

添加子分区:

alter table sales
modify partition p4
add subpartition p3sub1 values('COMPLETE')  tablespace test_tspace3;

 添加子分区时出错,点击进入查看。

四、删除分区

alter table sales drop partition p4;

删除子分区:

alter table sales drop subpartition p2sub1;

注:如果删除的子分区是一个分区中唯一的分区,则此分区不能被删除,要想删除此子分区就必须删除上级分区。

       如果删除的分区是一个表中唯一的分区,则此分区不能被删除,要想删除此分区就必须删除表。

五、截断分区

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

alter table DINYA_TEST truncate partition part_01;

通过以下代码截断子分区:

ALTER TABLE SALES TRUNCATE SUBPARTITION P2SUB2;

六、合并分区

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

alter table DINYA_TEST merge partitions part_01,part_02 into partition p1;

七、拆分分区

拆分分区将一个分区拆分两个新分区,拆分后原来分区不再存在。注意不能对HASH类型的分区进行拆分。

alter table DINYA_TEST
split partition p1
at(to_date('2013-07-07','yyyy-mm-dd'))
into(partition p01,partition p02);

八、结合分区(coalesca) 

九、重命名分区表

alter table DINYA_TEST rename partition p01 to p1

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值