2.散列子分区表的散列子分区集合
使用语法 ALTER TABLE MODIFY PARTITION COALESCE SUBPARTITION。 参见附件脚本1
删除表分区
只针对范围和列表分区或者组合*-范围和组合*-列表分区,散列分区不能删除,替代的方式是接合分区。
分区或子分区删除后,其中的数据也被删除,同样,基于这些分区或者子分区的本地索引中相应的分区和子分区也会被删除;对于全局索引除非使用了UPDATE INDEXS子句,删除分区后其会变成不可用,一般需要重构。如果要防止数据被删除替代的方式是使用合并分区MERGE PARTITION。
删除分区的语句是ALTER TABLE DROP PARTITION,删除子分区的语句时ALTER TABLE DROP SUBPARTITION。
1.从包含数据和全局索引的表中删除分区
此时指的是表中有数据,且包含一个或几个全局索引。
(1).方法一(推荐的方法)
先删除分区,再一个个的重构全部索引,此时可以解决范围分区的全局索引的问题(删除后全部变成不可用)。这么做的原因是不要考虑全局索引是什么分区的。一般的方法是编写一个工具子程序,通过动态SQL开重构索引:
ALTER TABLE table_name DROP PARTITION partition_name;
ALTER INDEX index_name1_on_ table_name REBUILD;
…
ALTER INDEX index_namen_on_ table_name REBUILD;
(2).方法二
先删除该分区的数据(因为删除数据会重构全局分区),再删除分区,一般针对数据不是特别多的表:
DELETE FROM table_name PARTITION(partition_name);
ALTER TABLE table_name PARTITION partition_name;
(3).方法三
使用UPDATE INDEXES子句,此时Oracle会自动重构该全局索引:
ALTER TABLE table_name PARTITION partition_name UPDATE INDEXES;
2.从包含数据和参照完整性(外键)的表中删除分区
(1).方法一
如果要删除的分区中的数据没有被参照引用,先禁用该参照完整性约束,再删除分区,最后再启用该参照完整性约束。
(2).方法二
如果要删除的分区中的数据被参照引用,先删除该分区中数据,再删除分区。
删除索引分区
无法显式的删除本地索引的分区,删除的唯一方式是本地索引分区基表的分区被删除时由Oracle自动的隐式删除。
如果全局索引分区是空的,则可以显式的删除它,使用的语句是ALTER INDEX index_name DROP PARTITION partition_name。但是,如果全局索引分区包含数据,删除则会引起更高级的分区(即下一个分区)变得不可用。如果非要这么做,则对更高级的分区需要重构,语法是:
ALTER INDEX index_name REUBILT PARTITION nextpartition_name
也是仅有列表分区或列表子分区存在该功能,如果要删除的值在当前分区子分区中存在,则不能报错,必须先删除该值对应的记录才能再删除,如果一个分区中只有一个值,无论其有否数据,也不能删除该值,因此对于存在default的List分区/子分区,本功能不可用。本操作完成后,本地索引和全局索引保留为可用。 参见附件脚本10
1.列表分区
ALTER TABLE table_name MODIFY PARTITION partition_name
DROP VALUES
2.列表子分区
ALTER TABLE table_name MODIFY SUBPARTITION subpartition_name
DROP VALUES
2.重构本地索引分区 参见附件脚本12.2
有以下两种方法:
(1).ALTER INDEX index_name REBUILD
{PARTITION partition_name| SUBPARTITION subpartition_name}
(2). ALTER TABLE table_name MODIFY
[{PARTITION partition_name| SUBPARTITION subpartition_name}
REBUILD UNUSABLE LOCAL INDEXES
重命名分区
使用重命名分区有两种需求,一种是将分区名改成更有意义的,第二种是将系统自动生成的分区名改成自己想要的名字。
1.重命名分区/子分区
ALTER TABLE table_name RENAME PARTITION old_name TO new_name;
ALTER TABLE table_name RENAME SUBPARTITION old_name TO new_name;
2.重索引分区
除关键字改成ALTER TABLE table_name 改成ALTER INDEX index_name外,其它同重命名分区/子分区
6.拆分索引分区
本地索引分区无法显式的拆分,其拆分的唯一途径是基表的分区拆分时由Oracle隐式的进行拆分。
全局索引分区可以拆分,拆分完成后需要重构,但我们不推荐这么做,如下例:
ALTER INDEX quon1 SPLIT
PARTITION canada AT ( 100 ) INTO
PARTITION canada1 ...,
PARTITION canada2 ...);
ALTER INDEX quon1 REBUILD PARTITION canada1;
ALTER INDEX quon1 REBUILD PARTITION canada2;