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