合并、分隔表分区!
来源:互联网 发布:产业链大数据包含 编辑:程序博客网 时间:2024/05/22 04:54
语法很简单:alter table tbname merge partitions/subpartitions pt1,pt2 into partition/subpartition pt3;
同样也支持update indexes子句以避免单独执行造成索引失效的问题。
需要注意一点,要合并的两个分区必须是连续的,这点是由分区本身的特性所决定的,如例:
SQL> select PARTITION_NAME,HIGH_VALUE,TABLESPACE_NAME from user_tab_partitions where TABLE_NAME = 'T_PARTITION_RANGE';PARTITION_NAME HIGH_VALUE TABLESPACE_NAME------------------------------ --------------- ------------------------------T_RANGE_P1 10 TBSPART01T_RANGE_P2 20 TBSPART02T_RANGE_P3 30 TBSPART03T_RANGE_PMAX MAXVALUE TBSPART04SQL> alter table t_partition_range merge partitions t_range_p1,t_range_p2 into partition t_range_pnew;表已更改。SQL> select PARTITION_NAME,HIGH_VALUE,TABLESPACE_NAME from user_tab_partitions where TABLE_NAME = 'T_PARTITION_RANGE';PARTITION_NAME HIGH_VALUE TABLESPACE_NAME------------------------------ --------------- ------------------------------T_RANGE_P3 30 TBSPART03T_RANGE_PMAX MAXVALUE TBSPART04T_RANGE_PNEW 20 SYSTEMSQL> alter table t_partition_range merge partitions T_RANGE_PNEW,T_RANGE_P3 into partition t_range_new tablespace tbspart03;表已更改。SQL> select PARTITION_NAME,HIGH_VALUE,TABLESPACE_NAME from user_tab_partitions where TABLE_NAME = 'T_PARTITION_RANGE';PARTITION_NAME HIGH_VALUE TABLESPACE_NAME------------------------------ --------------- ------------------------------T_RANGE_NEW 30 TBSPART03T_RANGE_PMAX MAXVALUE TBSPART04SQL> select * from t_partition_range partition(t_range_new); ID NAME---------- -------------------------------------------------- 11 a 12 b 13 c 8 g
可见,合并分区操作不会造成数据丢失,另外如果你想为新分区指定属性的话,在语句末尾处增加存储属性即可(如果不指定,则新分区默认继续表的存储属性)。注意,merge分区操作与coalesce分区操作一样,视被合并的分区数据量多少,都可能涉及到大量的IO操作。其它合并组合分区的操作与上类似,如果要合并组合分区,注意关键字是merge subpartitions,这里就不做演示了。
分隔分区(Split Partition)
如果你对我们前面讲到过的merge partition还有印象的话,那么学习Split partition也不会遇到什么障碍,split partition的功能与merge partition功能正好相反:后者是将两个全区合并成一个,前者则是将一个分区分隔成两个。其用途非常广泛,比如通常见你发现某个分区过大,你就可以通过这种方式将该分区分解成多个小分区,对我而言最常用到的,当然还是split maxvalue/default的分区。
该命令的语法针对不同分区会有不同的形式,
For range partition:alter table tbname split partition ptname at (value) into (partition newpt1 tbs_clause,partition newpt2 tbs_clause);
For list partition : alter table tbname split partition ptname values (v1,v2...vn) into (partition newpt1 tbs_clause,partition newpt2 tbs_clause);
上述两项,如果是操作子分区,则将partition关键字换成subpartition即可。旧分区中符合新定义值的记录会存储到指定的第一个分区中,其它的记录存储到第二个分区。
例如,range分区的示例。我们将t_range_new分区分隔到两个分区中,小于15的存放新建分区t_range_p1,其它数据存入t_range_p2分区:
SQL> select partition_name,high_value,tablespace_name from user_tab_partitions where table_name='T_PARTITION_RANGE';PARTITION_NAME HIGH_VALUE TABLESPACE_NAME------------------------------ --------------- ------------------------------T_RANGE_NEW 30 TBSPART03T_RANGE_PMAX MAXVALUE TBSPART04SQL> alter table t_partition_range split partition T_RANGE_NEW at (15) into 2 (partition t_range_p1 tablespace tbspart01,partition t_range_p2 tablespace tbspart02);表已更改。SQL> select partition_name,high_value,tablespace_name from user_tab_partitions where table_name='T_PARTITION_RANGE';PARTITION_NAME HIGH_VALUE TABLESPACE_NAME------------------------------ --------------- ------------------------------T_RANGE_P1 15 TBSPART01T_RANGE_P2 30 TBSPART02T_RANGE_PMAX MAXVALUE TBSPART04
再来演示一个list分区的例子。我们将t_list_p1分区中分区值大于5的存储到t_list_p2分区中,其它值存储到t_list_p1分区:
SQL> select partition_name,high_value,tablespace_name from user_tab_partitions where table_name='T_PARTITION_LIST';PARTITION_NAME HIGH_VALUE TABLESPACE_NAME------------------------------ --------------- ------------------------------T_LIST_P1 1, 2, 3, 4, 5, TBSPART01 6, 7, 8, 9, 10, 11T_LIST_PD default TBSPART04SQL> alter table t_partition_list split partition t_list_p1 values 2 (6,7,8,9,10,11) into 3 (partition t_list_p2 tablespace tbspart02, 4 partition t_list_p1 tablespace tbspart01);表已更改。SQL> select partition_name,high_value,tablespace_name from user_tab_partitions where table_name='T_PARTITION_LIST';PARTITION_NAME HIGH_VALUE TABLESPACE_NAME------------------------------ --------------- ------------------------------T_LIST_P2 6, 7, 8, 9, 10, TBSPART02 11T_LIST_P1 1, 2, 3, 4, 5 TBSPART01T_LIST_PD default TBSPART04
提示:split partition/subpartition不能用于hash分区或hash子分区(hash的话,直接用add partition就好了)。
- 合并、分隔表分区!
- Oracle表分区合并
- 分区表及分区索引(13)--分隔表分区
- 分区表及分区索引(11)--合并表分区
- MSSQLSERVER 分区创建 分区合并删除 分区
- U盘分区合并
- Windows2003 合并分区
- Windows2003 合并分区
- ubuntu下合并分区
- window服务器 合并分区
- Mac 双系统分区合并
- U盘分区合并
- iOS 内存合并分区
- Linq(3.连表、合并、分区(分页)、转换)
- 将一张表中的数据根据某行数据合并,并将另一行数据以逗号分隔合并
- Windows7无损分区,合并教程!
- Ubuntu用Gparted合并分区
- Git merge 合并分区详解
- 大学生活
- 自我推销的方法
- Moving ASM spfile to a shared device in RAC
- 索爱Android手机同步outlook电邮、日历、联系人、任务的方法--Moxier Pro
- C++ memcpy
- 合并、分隔表分区!
- 有关Oracle Data Guard Failover 的说明
- sql2005 远程连接问题解决方法
- C++ 虚基类,虚继承,菱形继承。
- The Rules of Probability
- WPF 获取当前文本光标所在窗口的坐标
- 解决Eclipse狂吃内存的解决方法(转)
- 骑士CMS,PHP+MYSQL 人才系统
- linux下发送arp请求报文 代码