oracle partition table related operations

来源:互联网 发布:python 多进程 编辑:程序博客网 时间:2024/06/05 08:39

Oracle 分区表的操作包括:add, split, drop, move, truncate, rename,merge(针对range分区表), coalesce(针对hash分区表)),Oracle 10g提供了以下几种分区类型:

       (1)范围分区(range);

       (2)哈希分区(hash);

       (3)列表分区(list);

       (4)范围-哈希复合分区(range-hash);

       (5)范围-列表复合分区(range-list)。

 

Range分区:

  Range分区是应用范围比较广的表分区方式,它是以列的值的范围来做为分区的划分条件,将记录存放到列值所在的range分区中。如按照时间划分,2010年1月的数据放到a分区,2月的数据放到b分区,在创建的时候,需要指定基于的列,以及分区的范围值。在按时间分区时,如果某些记录暂无法预测范围,可以创建maxvalue分区,所有不在指定范围内的记录都会被存储到maxvalue所在分区中。

1,range 分区

create table examplepart (
idx number, txt varchar2(20)
)
partition by range(idx)
(
 partition p1 values less than (0),
 partition p2 values less than (10000) tablespace users,
 partition p3 values less than (maxvalue)
);


create index examplepart_ind on examplepart (idx) nologging parallel;


alter table examplepart parallel 5;

 

alter table examplepart split partition p2 at (5000) into
(partition p2_1,partition p2_2) parallel 2;

 

alter table examplepart merge partitions p2_1,p2_2 into partition p2 tablespace users
compress update indexes;


alter table examplepart drop partition p3;

新增加的PARTITION必须是值比以前的所有的值都大,所以需要先drop partition p3
alter table examplepart add partition p4 values less than (100000);

alter table examplepart rename partition p4 to p3;

alter table examplepart add partition p4 values less than (maxvalue);

alter table examplepart move partition p3 tablespace EXAMPLE compress;

alter table examplepart truncate partition p4;

SQL> alter table examplepart coalesce partition;
alter table examplepart coalesce partition
            *
ERROR at line 1:
ORA-14259: table is not partitioned by Hash method

 

Hash分区:

  对于那些无法有效划分范围的表,可以使用hash分区,这样对于提高性能还是会有一定的帮助。hash分区会将表中的数据平均分配到你指定的几个分区中,列所在分区是依据分区列的hash值自动分配,因此你并不能控制也不知道哪条记录会被放到哪个分区中,hash分区也可以支持多个依赖列。

2,HASH分区
create table hashtest(id int,name varchar2(20))
partition by hash(id)
partitions 8 store in (batch)
nologging
parallel;

 

SQL> select table_NAME,PARTITION_NAME from user_tab_partitions where table_name='HASHTEST';

TABLE_NAME                     PARTITION_NAME
------------------------------ ------------------------------
HASHTEST                       SYS_P49
HASHTEST                       SYS_P50
HASHTEST                       SYS_P51
HASHTEST                       SYS_P52
HASHTEST                       SYS_P53
HASHTEST                       SYS_P54
HASHTEST                       SYS_P55
HASHTEST                       SYS_P56

8 rows selected.

 

合并分区:

SQL> alter table hashtest coalesce partition;

Table altered.

SQL> select table_NAME,PARTITION_NAME from user_tab_partitions where table_name='HASHTEST';

TABLE_NAME                     PARTITION_NAME
------------------------------ ------------------------------
HASHTEST                       SYS_P49
HASHTEST                       SYS_P50
HASHTEST                       SYS_P51
HASHTEST                       SYS_P52
HASHTEST                       SYS_P53
HASHTEST                       SYS_P54
HASHTEST                       SYS_P55

7 rows selected.

从上面可以看出,做了一下合并(coalesce)分区,分区数目就少了一个是,7个分区了。 

 

SQL> alter table hashtest drop  partition SYS_P49;
alter table hashtest drop  partition SYS_P49
                                     *
ERROR at line 1:
ORA-14255: table is not partitioned by Range, Composite Range or List method

从上面可以看出,HASH分区表的分区时不可以被DROP的。但是是可以进行MOVE的。

move hash patition:
SQL> alter table hashtest move partition SYS_P49 tablespace users;

Table altered.

SQL> select table_NAME,PARTITION_NAME from user_tab_partitions where table_name='HASHTEST';

TABLE_NAME                     PARTITION_NAME
------------------------------ ------------------------------
HASHTEST                       SYS_P49
HASHTEST                       SYS_P50
HASHTEST                       SYS_P51
HASHTEST                       SYS_P52
HASHTEST                       SYS_P53
HASHTEST                       SYS_P54
HASHTEST                       SYS_P55

7 rows selected.

 

ADD hash partition

SQL> alter table hashtest add partition SYS_P56;

Table altered.

 

不能split partition

 SQL> alter table hashtest split partition SYS_P49 at (1000);
alter table hashtest split partition SYS_P49 at (1000)
            *
ERROR at line 1:
ORA-14255: table is not partitioned by Range, Composite Range or List method

Truncate hash分区

SQL> alter table hashtest truncate partition SYS_P49;

Table truncated.

Rename hash partition: 

SQL> alter table hashtest rename partition SYS_P56 to SYS_P48;

Table altered.

 

To be continued.......


 

 

 

 

 


 

原创粉丝点击