设为首页 加入收藏

TOP

Oracle中分区表的使用(二)
2014-11-24 02:42:17 来源: 作者: 【 】 浏览:6
Tags:Oracle 分区表 使用
制定的分区(表空间)中。

当然,我们还可以根据需求,使用两个字段的范围分布来分区,如partition by range ( transaction_id ,transaction_date), 分区条件中的值也做相应的改变,请读者自行测试。

--------------------------------- 以上没有在pl/sql 测试!

1.2) 范围分区创建成功之后的相关操作测试;

a)向表添加测试数据:

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(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'));

b)查询

b.1) 如果查询全表数据

select * from dinya_test; 如下图:

< 全表数据>

select * from dinya_test partition (part_01); 如下图:

select * from dinya_test partition (part_02); 如下图:

select * from dinya_test partition (part_03); 如下图:

update dinya_test partition (part_01) t set t.item_description= 'DESK' where t.transaction_id= 1 ;

select * from dinya_test partition (part_01) ;BOOKS->DESK( 发生变化)

                  

select * from dinya_test (此结果就不用查看了,肯定变了);

--- 删除part_03 分区中transaction_id=4 的记录:

delete from dinya_test partition (part_03) t where t.transaction_id= 4 ;

select * from dinya_test partition(part_03)

             少了transaction_id=4的记录(与上图对比)

c)索引的创建:

   c.1)局部索引的创建:

create index dinya_idx_t on dinya_test(item_id)

local

(

partition idx_1 tablespace dinya_space01,--- 分区名为:idx_1

partition idx_2 tablespace dinya_space02, --- 分区名为:idx_2

partition idx_3 tablespace dinya_space03--- 分区名为:idx_3

);   ---pl/sql 测试成功

注:

select * from ALL_TAB_PARTITIONS where table_name = 'DINYA_TEST'

    select * From dba_ind_partitions where partition_name= 'IDX_1'

   c.2)全局索引的创建:

全局索引建立时global 子句允许指定索引的范围值,这个范围值为索引字段的范围值:

create index dinya_idx_t on dinya_test(item_id)

global partition by range (item_id)

(

partition idx_1 values less than ( 1000 ) tablespace dinya_space01,

partition idx_2 values less than ( 10000 ) tablespace dinya_space02,

partition idx_3 values less than ( maxvalue ) tablespace dinya_space03

); ----PL/SQL 末测试[ 参照以上local] ;

整个表创建索引:

   Create index dinya_idx_t on dinya_test(item_id);

备注: select * from all_indexes(dba_indexes 、all_ind_columns 、user_ind_columns 、dba_ind_columns )

1.3) Hash分区(散列分区)

——————————以下没有在机器上测试

散列分区为通过指定分区编号来均匀分布数据的一种分区类型,因为通过在I/O 设备上进行散列分区,使得这些分区大小一致。如将物料交易表的数据根据交易ID 散列地存放在指定的三个表空间中:

create table dinya_test

(

transaction_id number primary key,

item_id number(8) not null,

item_description varchar2(300),

transaction_date date

)

partition by hash(transaction_id)

(

partition part_01 tablespace dinya_space01,

partition part_02 tablespace dinya_space02,

partition part_03 tablespace dinya_space03

);

建表成功,此时插入数据,系统将按transaction_id 将记录散列地插入三个分区中,这里也就是三个不同的表空间中。

——————————以上没有在机器上测试;

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

示例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 VALUE

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

评论

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