合并分区(coalesce partition)

合并分区(coalesce partition):合并分区是用来操作HASH分区表和hash全局索引的。他会重新分配删除的分区的数据到你现有的分区中。
限制:操作HASH分区表和hash全局索引,如果对LIST/RANGE分区表进行合并报错ORA-14259: 表未被散列方法分区
      全局索引只有RANGE和HASH才有,并且RANGE不能使用合并,同时也不能对range分区进行添加分区报错ORA-14640: 添加/合并索引分区操作只对散列分区的全局索引有效,
      而且建立全局RANGE分区必须带有MAXVALUE属性,并且是不行删除的MAXVALUE分区,如果删除报错ORA-14078: 您不能删除 GLOBAL 索引的最高分区。
我们这里讨论对索引的影响,包括全局索引,本地索引和普通索引。
使用脚本:

drop table t_pe_h;
CREATE TABLE t_pe_h (i NUMBER, j NUMBER , f number,k varchar2(20))
     PARTITION BY hash(j)
        (PARTITION p1 ,
         PARTITION p2,
         partition p4,
         partition p3);
create index t_pe_h_n on t_pe_h(i);
create index t_pe_h_l on t_pe_h(j) local;
create index t_pe_h_g on t_pe_h(f)
 GLOBAL PARTITION BY range(f)
        (PARTITION p1 VALUES  less than (10),
         PARTITION p2 VALUES less than (20),
         PARTITION p3 VALUES less than (maxvalue ));

insert into t_pe_h
values(2,5,5,'A');
insert into t_pe_h
values(1,15,10,'B');
insert into t_pe_h
values(3,25,40,'C');
insert into t_pe_h
values(2,65,30,'A');
insert into t_pe_h
values(1,75,20,'B');
insert into t_pe_h
values(3,85,50,'C');

 

select INDEX_NAME ,STATUS,a.partition_name from dba_ind_partitions a where lower(index_name)='t_pe_h_l';
select INDEX_NAME ,STATUS,a.partition_name from dba_ind_partitions a where lower(index_name)='t_pe_h_g';
select INDEX_NAME ,STATUS from dba_indexes where lower(index_name)='t_pe_h_n';

然后查看索引状态
SQL> ALTER TABLE t_pe_h
  2       COALESCE PARTITION;
 
Table altered
 
SQL>
SQL> select INDEX_NAME ,STATUS,a.partition_name from dba_ind_partitions a where lower(index_name)='t_pe_h_l';
 
INDEX_NAME                     STATUS   PARTITION_NAME
------------------------------ -------- ------------------------------
T_PE_H_L                       USABLE   P4
T_PE_H_L                       UNUSABLE P2
T_PE_H_L                       USABLE   P1
SQL> select INDEX_NAME ,STATUS,a.partition_name from dba_ind_partitions a where lower(index_name)='t_pe_h_g';
 
INDEX_NAME                     STATUS   PARTITION_NAME
------------------------------ -------- ------------------------------
T_PE_H_G                       UNUSABLE P3
T_PE_H_G                       UNUSABLE P2
T_PE_H_G                       UNUSABLE P1
SQL> select INDEX_NAME ,STATUS from dba_indexes where lower(index_name)='t_pe_h_n';
 
INDEX_NAME                     STATUS
------------------------------ --------
T_PE_H_N                       UNUSABLE
可以发现都失效了,明显的合并分区自动把P2 ,P3合并为P2了,并且起本地索引相关的P2分区也失效了,因为底层的表的ROWID改变了。
普通索引和全局索引均失效。
然后我们试试UPDATE INDEXES

SQL> ALTER TABLE t_pe_h
  2       COALESCE PARTITION update indexes;
 
Table altered
 
SQL>
SQL> select INDEX_NAME ,STATUS,a.partition_name from dba_ind_partitions a where lower(index_name)='t_pe_h_l';
 
INDEX_NAME                     STATUS   PARTITION_NAME
------------------------------ -------- ------------------------------
T_PE_H_L                       USABLE   P4
T_PE_H_L                       USABLE   P2
T_PE_H_L                       USABLE   P1
SQL> select INDEX_NAME ,STATUS,a.partition_name from dba_ind_partitions a where lower(index_name)='t_pe_h_g';
 
INDEX_NAME                     STATUS   PARTITION_NAME
------------------------------ -------- ------------------------------
T_PE_H_G                       USABLE   P3
T_PE_H_G                       USABLE   P2
T_PE_H_G                       USABLE   P1
SQL> select INDEX_NAME ,STATUS from dba_indexes where lower(index_name)='t_pe_h_n';
 
INDEX_NAME                     STATUS
------------------------------ --------
T_PE_H_N                       VALID
可以看到均有效,没有问题。另外你还可以使用合并分区来合并全局HASH的索引,如下:
ALTER INDEX hgidx COALESCE PARTITION;(对hash全局分区索引有效)

 

时间: 2024-11-08 23:45:07

合并分区(coalesce partition)的相关文章

合并分区之利用软件篇_应用技巧

用Partition Magic如何将两个分区合并在一起,请各位高手指点.  晕啊.你用PQ中文版啊..不会做就看帮助. 分区魔术师等一些软件都可以做的到的 先把两个分区都格了,再调整其中一个就可以了 这样是不行的... 空间不够用可以用mklink命令解决... 2个分区, 不是连接的应该不可以吧 用 PartitionMagic 合并分区:  教程:  你的数据不重要 ??? 对的,不连接的不可以的 用PQ中文版将需取消的分区(以选择最末的盘区为宜)并入相邻的分区就行. 用这个,比PQ好 A

用分区助手怎么合并分区

"合并分区"功能也是一个如分配空闲空间一样,将复杂的操作过程直观化的实用功能.在你用它来扩大某个盘的时候,它实际上会执行分区的移动.扩大等操作.或许你很费劲的才弄出来的一个未分配空间,但是你却不知道怎么才能用它来扩大分区或者还需要花费更多的时间,那么你可以使用合并功能来将其合并到任意一个你想要扩大的盘(前提是在同一块硬盘上). "合并分区"的另一个特点是你可以直接合并两个相邻的盘.它的好处是在不改变相邻两个盘里面数据的情况下,将两个小的分区合并成为一个大分区,以充分

win7下硬盘如何合并分区

合并分区的方法实际上就是划分新分区的逆操作. 例如我们准备把T盘合并到D盘,看图解如下 图解一 右击不想保留的分区选择"删除卷" 右击要删除的盘右击选择"删除卷"; 图解二选择想要扩展的分区 图解三扩展后的D盘已经增加了容量 到此扩展分区完成

Windows7系统硬盘合并分区的方法

Windows 7磁盘合并分区的方法实际上就是划分新分区的逆操作.例如我们准备把T盘合并到D盘.注意:删除分区之前一定要保存重要资料哦. Windows7系统硬盘合并分区的具体操作步骤如下: 1.右击"计算机"--选择管理, 右击不想保留的分区选择"删除卷" 右击要删除的盘右击选择"删除卷", 2.选择想要扩展的分区, 3.右击D盘选择"扩展卷"就会出现"扩展卷向导"选择空的多余空间确定.

win7怎么合并分区?

  关于win7硬盘分区的问题,是现在很多朋友经常会使用到的功能,因为随着电脑的普及,我们对于电脑的要求也越来越多,需要使用的情况也越来越多,个性化的定制也成为电脑的一个需求,而整合分区便是其中一个最为受青睐的问题.下面,小编就给大家分享一下不重装系统的情况下win7怎么合并分区! 首先,我们找到桌面上的计算机图标,然后点击右键,选择管理. 在弹出来的窗口中,我们点击磁盘管理,这样,我们就可以看到现在的win7电脑分区情况. 如果是需要腾出一定的内存空间的话,我们可以直接删除不想要的分区,这个分

diskgenius怎么合并分区

  1.diskgenius合并分区的方法很简单,首先打开diskgenius软件,大家可以看到一个带有两个分区的硬盘,接下来小编给大家介绍怎么合并成一个 2.对硬盘进行合并和分区操作前最好先备份文件,右键单击其中一个分区,然后选择删除当前分区 3.此时diskgenius便会提示删除该分区文件将丢失,我们提前已经备份好文件了,所以点击是就可以了 4.diskgenius删除分区后我们需要点击左上角的保存更改 5.diskgenius保存更改完成后右键单击想要合并分区的盘符,点击调整分区大小 6

使用u大师4.3.5如何合并分区

打开分区工具,这里我们选择无损分区助手: 打开分区助手之后,选中一个你想合并的分区,选择合并分区: 完成之后,我们开始调整要合并的分区,一般情况下,合并分区都是相邻的分区. 点击确定就会开始合并分区,因为是无损合并的原因,会根据两个分区的里面数据的多少,时间上会有所差异,确定之后选择提交! 提交之后就是合并的过程,请耐心等候. 完成之后,最好修复下mbr! 当然,除了以上方法之外,也可以选择windows自带的磁盘管理功能进行操作,但是过程中会需要删除分区,然后扩充卷,这里小编不过多的赘述,有兴

怎么合并分区

  "合并分区"功能也是一个如分配空闲空间一样,将复杂的操作过程直观化的实用功能.在你用它来扩大某个盘的时候,它实际上会执行分区的移动.扩大等操作.或许你很费劲的才弄出来的一个未分配空间,但是你却不知道怎么才能用它来扩大分区或者还需要花费更多的时间,那么你可以使用合并功能来将其合并到任意一个你想要扩大的盘(前提是在同一块硬盘上)."合并分区"的另一个特点是你可以直接合并两个相邻的盘.它的好处是在不改变相邻两个盘里面数据的情况下,将两个小的分区合并成为一个大分区,以充

虚拟机分区对齐(Partition Alignment)问与答

Q: 什么是Partition Alignment(分区对齐)? A: 这主要指客户机OS的分区需要和存储设备的块对齐.具体来说就是分区起始偏移(PSO, Partition Starting Offset)应该是4096的倍数.Windows 2008.Vista和Win7全新安装后,Partition Starting Offset是1048576,已经是4096的倍数,因此无需调整.但是Windows XP,2000和2003的Partition Starting Offset是32256