oracle partition by list,深入解析partition-list 分区

删除分区:alter table[tablename] drop partition[ptname];

删除子分区:alter table[tablename] drop subpartition[ptname];

例:

--删除default分区

SQL> alter table t_partition_list drop partition t_list_default;

表已更改。

SQL> select partition_name,high_value,tablespace_name from user_tab_partitions

2 where table_name='T_PARTITION_LIST';

PARTITION_NAME HIGH_VALUE TABLESPACE_NAME

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

T_LIST_P1 1, 3, 5, 7, 9 TBS01

T_LIST_P2 2, 4, 6, 8, 10 TBS02

T_LIST_P3 21, 23, 25, 27, 29 TBS03

T_LIST_P4 20, 22, 24 TBS03

--添加default分区

SQL> alter table t_partition_list add partition t_list_default values(default) tablespace tbs03;

表已更改。

3.4、合并表分区(merge partitions)

语法: alter table tbname merge partitions/subpartitions pt1,pt2 into partition/subpartition pt3;

例:

SQL> select partition_name,high_value,tablespace_name from user_tab_partitions

2 where table_name='T_PARTITION_LIST';

PARTITION_NAME HIGH_VALUE TABLESPACE_NAME

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

T_LIST_DEFAULT default TBS03

T_LIST_P1 1, 3, 5, 7, 9 TBS01

T_LIST_P2 2, 4, 6, 8, 10 TBS02

T_LIST_P3 21, 23, 25, 27, 29 TBS03

T_LIST_P4 20, 22, 24 TBS03

SQL> alter table t_partition_list merge partitions t_list_p4,t_list_default into partition t_list_de fault;

表已更改。

SQL> select partition_name,high_value,tablespace_name from user_tab_partitions

2 where table_name='T_PARTITION_LIST';

PARTITION_NAME HIGH_VALUE TABLESPACE_NAME

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

T_LIST_DEFAULT default JJJG

T_LIST_P1 1, 3, 5, 7, 9 TBS01

T_LIST_P2 2, 4, 6, 8, 10 TBS02

T_LIST_P3 21, 23, 25, 27, 29 TBS03

3.5、交换表分区(exchange partition)

语法:alter table tbname1 exchange partition/subpartition ptname with table tbname2;

注意事项同前面二章(range与hash分区)此功能一样,在此不多述,具体用法参见下例。

--insert into list partition

SQL> insert into t_partition_list values(1,'a');

已创建 1 行。

SQL> insert into t_partition_list values(2,'b');

已创建 1 行。

SQL> insert into t_partition_list values(33,'c');

已创建 1 行。

SQL> commit;

提交完成。

SQL> select * from t_partition_list;

ID NAME

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

1 a

2 b

33 c

SQL> select * from t_partition_list partition(t_list_p2);

ID NAME

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

2 b

--在此借用range patition中exchange partition实例中的t_range_partition_tmp表,进行list partiiton的exchange partition操作

SQL> select * from t_partition_range_tmp;

ID NAME

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

11 a

SQL> insert into t_partition_range_tmp values(4,'c');

已创建 1 行。

SQL> insert into t_partition_range_tmp values(6,'d');

已创建 1 行。

SQL> commit;

提交完成。

SQL> select * from t_partition_range_tmp;

ID NAME

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

11 a

4 c

6 d

SQL> alter table t_partition_list exchange partition t_list_p2

2 with table t_partition_range_tmp;

with table t_partition_range_tmp

*

第 2 行出现错误:

ORA-14099: 未对指定分区限定表中的所有行

SQL> delete from t_partition_range_tmp where id=11;

已删除 1 行。

SQL> commit;

提交完成。

SQL> alter table t_partition_list exchange partition t_list_p2

2 with table t_partition_range_tmp;

表已更改。

SQL> select * from t_partition_list;

ID NAME

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

1 a

4 c

6 d

33 c

SQL> select * from t_partition_range_tmp;

ID NAME

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

2 b

3.6、修改list表分区(modify partition)

3.6.1、add values添加指定分区的value值

此命令仅应用于 list 分区或 list 子分区,语法也非常简单:

Alter table tbname modify partition/subpartition ptname add values (v1,v2....vn);

例如:

SQL> select partition_name,high_value from user_tab_partitions

2 where table_name='T_PARTITION_LIST';

PARTITION_NAME HIGH_VALUE

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

T_LIST_DEFAULT default

T_LIST_P1 1, 3, 5, 7, 9

T_LIST_P2 2, 4, 6, 8, 10

T_LIST_P3 21, 23, 25, 27, 29

SQL> alter table t_partition_list modify partition t_list_p1 add values(11,12);

表已更改。

SQL> select partition_name,high_value from user_tab_partitions

2 where table_name='T_PARTITION_LIST';

PARTITION_NAME HIGH_VALUE

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

T_LIST_DEFAULT default

T_LIST_P1 1, 3, 5, 7, 9, 11, 12

T_LIST_P2 2, 4, 6, 8, 10

T_LIST_P3 21, 23, 25, 27, 29

注意: 要添加的新value值不能存在于当前任何分区中,并且当前表也不能存在记录值为新值的记录,特别是当你创建了default分区的时候,有必要先检查一下当前表不存在要添加的值,不 然执行会出错,如下例所示:

SQL> alter table t_partition_list modify partition t_list_p1 add values(2);

alter table t_partition_list modify partition t_list_p1 add values(2)

*

第 1 行出现错误:

ORA-14312: 值 2 已经存在于分区 2 中

SQL> alter table t_partition_list modify partition t_list_p1 add values(33);

alter table t_partition_list modify partition t_list_p1 add values(33)

*

第 1 行出现错误:

ORA-14324: 所要添加的值已存在于 DEFAULT分区之中

--查询表t_partition_list记录,存在id为33的记录

SQL> select * from t_partition_list;

ID NAME

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

1 a

4 c

6 d

33 c

3.6.2、drop values删除指定分区的value值

与上面的add values类似,只适用于list分区或list子分区,但功能相反,语法如下:

alter table tbname modify partition/subpartition ptname drop values(v1,v2……vn);

例:将上面例子中t_parition_list表t_list_p1分区中新增的11,12值删除

SQL> alter table t_partition_list modify partition t_list_p1 drop values(11,12);

表已更改。

SQL> select partition_name,high_value from user_tab_partitions

2 where table_name='T_PARTITION_LIST';

PARTITION_NAME HIGH_VALUE

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

T_LIST_DEFAULT default

T_LIST_P1 1, 3, 5, 7, 9

T_LIST_P2 2, 4, 6, 8, 10

T_LIST_P3 21, 23, 25, 27, 29

注意:在删除list分区中的values值时,要确认当前分区存在指定的value值,且没有应用该值的记录,否则会报错,如下例所示:

SQL> alter table t_partition_list modify partition t_list_p1 drop values(2);

alter table t_partition_list modify partition t_list_p1 drop values(2)

*

第 1 行出现错误:

ORA-14313: 值 2 不在分区 T_LIST_P1 中

SQL> alter table t_partition_list modify partition t_list_p1 drop values(1);

alter table t_partition_list modify partition t_list_p1 drop values(1)

*

第 1 行出现错误:

ORA-14518: 分区包含的某些行对应于已删除的值

3.7、截断表分区(truncate partition)

语法:alter table tbname truncate partition ptname

SQL> select * from t_partition_list;

ID NAME

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

1 a

4 c

6 d

33 c

SQL> select partition_name,high_value from user_tab_partitions

2 where table_name='T_PARTITION_LIST';

PARTITION_NAME HIGH_VALUE

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

T_LIST_DEFAULT default

T_LIST_P1 1, 3, 5, 7, 9

T_LIST_P2 2, 4, 6, 8, 10

T_LIST_P3 21, 23, 25, 27, 29

SQL> alter table t_partition_list truncate partition t_list_p1;

表被截断。

SQL> select * from t_partition_list;

ID NAME

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

4 c

6 d

33 c

3.8、移动表分区(move partition)

语法:alter table tbname move partition ptname ……

前二章讲range和hash分区时,都提到move partition,其用法功能都一样,在此不多述,直接看例子:

SQL> select partition_name,tablespace_name from user_tab_partitions

2 where table_name='T_PARTITION_LIST';

PARTITION_NAME TABLESPACE_NAME

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

T_LIST_DEFAULT JJJG

T_LIST_P1 TBS01

T_LIST_P2 JJJG

T_LIST_P3 TBS03

SQL> alter table t_partition_list move partition t_list_p2 tablespace tbs02;

表已更改。

SQL> select partition_name,tablespace_name from user_tab_partitions

2 where table_name='T_PARTITION_LIST';

PARTITION_NAME TABLESPACE_NAME

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

T_LIST_DEFAULT JJJG

T_LIST_P1 TBS01

T_LIST_P2 TBS02

T_LIST_P3 TBS03

3.9、重命名表分区(rename partition)

语法:alter table tbname rename partition ptname to newptname;

例:

SQL> select partition_name,tablespace_name from user_tab_partitions

2 where table_name='T_PARTITION_LIST';

PARTITION_NAME TABLESPACE_NAME

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

T_LIST_DEFAULT JJJG

T_LIST_P1 TBS01

T_LIST_P2 TBS02

T_LIST_P3 TBS03

SQL> alter table t_partition_list rename partition t_list_p1 to t_list_p4;

表已更改。

SQL> select partition_name,tablespace_name from user_tab_partitions

2 where table_name='T_PARTITION_LIST';

PARTITION_NAME TABLESPACE_NAME

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

T_LIST_DEFAULT JJJG

T_LIST_P2 TBS02

T_LIST_P3 TBS03

T_LIST_P4 TBS01

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值