oracle拆分分区语法详解大全_Oracle 11g 分区拆分与合并

时间范围分区拆分

create table emp (

id number(6) not null,

hire_date date not null)

partition by range(hire_date)

(partition p_1998 values less than (to_date('1998-12-31','YYYY-MM-DD')),

partition p_1999 values less than (to_date('1999-12-31','YYYY-MM-DD')),

partition p_default values less than (maxvalue)

);

insert into emp values(10,to_date('1999-5-20','YYYY-MM-DD'));

insert into emp values(20,to_date('1999-8-10','YYYY-MM-DD'));

SQL> select count(*) from emp partition(p_1999);

COUNT(*)

----------

2

将p_1999分区拆分成两个分区

SQL> ALTER TABLE emp SPLIT PARTITION p_1999

2     AT (to_date('1999-07-01','YYYY-MM-DD'))

3     INTO (PARTITION p_1999_01, PARTITION p_1999_02);

表已更改。

SQL> select count(*) from emp partition(p_1999_01);

COUNT(*)

----------

1

SQL> select count(*) from emp partition(p_1999_02);

COUNT(*)

----------

1

将p_default分区拆分成两个分区

SQL> insert into emp values(30,to_date('2000-5-27','YYYY-MM-DD'));

已创建 1 行。

SQL> insert into emp values(40,to_date('2001-10-02','YYYY-MM-DD'));

已创建 1 行。

SQL> select count(*) from emp partition(p_default);

COUNT(*)

----------

2

SQL> ALTER TABLE emp SPLIT PARTITION p_default

2         AT (to_date('2000-12-31','YYYY-MM-DD'))

3         INTO (PARTITION p_2000, PARTITION p_default);

表已更改。

SQL> select count(*) from emp partition(p_default);

COUNT(*)

----------

1

SQL> select count(*) from emp partition(p_2000);

COUNT(*)

----------

1

SQL> select * from emp partition(p_default);

ID HIRE_DATE

---------- -------------------

40 2001-10-02 00:00:00

SQL> select * from emp partition(p_2000);

ID HIRE_DATE

---------- -------------------

30 2000-05-27 00:00:00

LIST分区拆分

SQL> create table dept (

2  id number(6) not null,

3  area varchar2(15) not null)

4  partition by list(area)

5  (

6     PARTITION asia VALUES ('CHINA', 'THAILAND'),

7     PARTITION europe VALUES ('GERMANY', 'ITALY', 'SWITZERLAND'),

8     PARTITION west VALUES ('AMERICA'),

9     PARTITION east VALUES ('INDIA'),

10     PARTITION rest VALUES (DEFAULT));

表已创建。

SQL> insert into dept values(10,'MEXICO');

已创建 1 行。

SQL> insert into dept values(20,'COLOMBIA');

已创建 1 行。

SQL> select count(*) from dept partition(rest);

COUNT(*)

----------

2

SQL> ALTER TABLE dept SPLIT PARTITION rest

2     VALUES ('MEXICO', 'COLOMBIA')

3     INTO (PARTITION south, PARTITION rest);

表已更改。

SQL> select count(*) from dept partition(rest);

COUNT(*)

----------

0

SQL> select count(*) from dept partition(south);

COUNT(*)

----------

2

分区合并

SQL> SELECT table_name,partition_name  FROM USER_tab_partitions where table_name='EMP';

TABLE_NAME                     PARTITION_NAME

------------------------------ ------------------------------

EMP                            P_1998

EMP                            P_1999_01

EMP                            P_1999_02

EMP                            P_2000

EMP                            P_DEFAULT

SQL> ALTER TABLE emp

2         MERGE PARTITIONS P_1999_01, P_1999_02 INTO PARTITION P_1999;

表已更改。

SQL> SELECT table_name,partition_name  FROM USER_tab_partitions where table_name='EMP';

TABLE_NAME                     PARTITION_NAME

------------------------------ ------------------------------

EMP                            P_1998

EMP                            P_1999

EMP                            P_2000

EMP                            P_DEFAULT

SQL> SELECT table_name,partition_name  FROM USER_tab_partitions where table_name='DEPT';

TABLE_NAME                     PARTITION_NAME

------------------------------ ------------------------------

DEPT                           ASIA

DEPT                           EUROPE

DEPT                           WEST

DEPT                           EAST

DEPT                           SOUTH

DEPT                           REST

已选择6行。

SQL> ALTER TABLE dept

2     MERGE PARTITIONS south, rest INTO PARTITION rest;

表已更改。

SQL> select count(*) from dept partition(rest);

COUNT(*)

----------

2

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值