设为首页 加入收藏

TOP

Oracle中分区表的使用(三)
2014-11-24 02:42:17 来源: 作者: 【 】 浏览:5
Tags:Oracle 分区表 使用
S ('ACTIVE') TABLESPACE PROB_TS01,

PARTITION PROB_INACTIVE VALUES ('INACTIVE') TABLESPACE PROB_TS02

)

备注:active 和inactive 是列status 的值!谨记与range 和hash 分区的区别;

1.4.1)测试如下:

insert into PROBLEM_TICKETS values ( 1 , 'BOOKS' , 1 , sysdate , 'ACTIVE' );

insert into PROBLEM_TICKETS values ( 2 , 'son' , 2 , sysdate + 30 , 'INACTIVE' );

insert into PROBLEM_TICKETS values ( 3 , 'son' , 3 ,to_date( '2006-05-30' , 'yyyy-mm-dd' ), 'INACTIVE' );

insert into PROBLEM_TICKETS values ( 4 , 'BOOKS' , 4 ,to_date( '2007-06-23' , 'yyyy-mm-dd' ), 'INACTIVE' );

insert into PROBLEM_TICKETS values ( 5 , 'old' , 5 ,to_date( '2011-02-26' , 'yyyy-mm-dd' ), 'ACTIVE' );

insert into PROBLEM_TICKETS values ( 6 , 'test' , 6 ,to_date( '2011-04-30' , 'yyyy-mm-dd' ), 'INACTIVE' );

select * from PROBLEM_TICKETS

< 查询全表>

1.4.2)

select * from PROBLEM_TICKETS partition (PROB_ACTIVE)

1.4.2)

select * from PROBLEM_TICKETS partition (PROB_INACTIVE)

在测试中遇到这样的情况。如果表创建了分区,如果要删除数据文件(表空间文件),则要先删除分区,然后才能删除数据文件(但是在删除数据文件时,必须要保留一个分区才能最终删除数据文件> 表空间文件,)

当然,也可以直接就删除表也行,刚所有的全删除,但是表空间文件还在!

1.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 3 store in (dinya_space07,dinya_space08,dinya_space09)

(

partition part_07 values less than (to_date( '2006-01-01' , 'yyyy-mm-dd' )),

partition part_08 values less than (to_date( '2010-01-01' , 'yyyy-mm-dd' )),

partition part_09 values less than ( maxvalue )

);

--- 测试如下:

select * From user_tab_partitions where table_name=upper( 'dinya_test' )

selec * From user_tab_subpartitions where table_name=upper( 'dinya_test' )

《图1 》

插入如下数据:

insert into dinya_test values ( 1 , 12 , 'BOOKS' , sysdate );

insert into dinya_test values ( 2 , 12 , 'BOOKS' , sysdate + 30 );

insert into dinya_test values ( 3 , 12 , 'BOOKS' ,to_date( '2006-05-30' , 'yyyy-mm-dd' ));

insert into dinya_test values ( 7 , 12 , 'BOOKS' ,to_date( '2005-05-30' , 'yyyy-mm-dd' ));

insert into dinya_test values ( 4 , 12 , 'BOOKS' ,to_date( '2007-06-23' , 'yyyy-mm-dd' ));

insert into dinya_test values ( 5 , 12 , 'BOOKS' ,to_date( '2011-02-26' , 'yyyy-mm-dd' ));

insert into dinya_test values ( 6 , 12 , 'BOOKS' ,to_date( '2011-04-30' , 'yyyy-mm-dd' ));

select * From dinya_test : 如下图

select * From dinya_test partition (part_07) 如下图:

select * From dinya_test partition (part_09)

参照下图,按所显的子分区名,看能否查出数据:

select * From user_tab_subpartitions where table_name=upper( 'dinya_test' )

select * From dinya_test subpartition (SYS_SUBP62) :如下图:

其它的查询一样。----- 测试成功;

备注: 该例中,先是根据交易日期进行范围分区,然后根据交易的ID 将记录散列地存储在三个表空间中。

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

示例1:

Create table sales

(

Product_id varchar2 ( 5 ),

Sales_date date ,

Sales_cost number ( 10 ),

Status varchar2 ( 20 )

)

Partition by range (Sales_cost)

Subpartition by list (status)

(

Partition p1 values less than ( 1 ) tablespace dinya_space01

(

Subpartition p1sub1 values ( 'ACTIVE' ) tables

首页 上一页 1 2 3 4 5 下一页 尾页 3/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Oracle表分区之范围分区 下一篇Oracle表分区之散列分区

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: