设为首页 加入收藏

TOP

Oracle 11g维护分区(五)——Merging Partitions
2015-08-31 19:59:47 来源: 作者: 【 】 浏览:33
Tags:Oracle 11g 维护 分区 Merging Partitions

合并分区


使用ALTER TABLE ... MERGE PARTITION语句将两个分区的内容合并到一个分区。原来的两个分区将会被删除,相关的本地索引也会被删除。对于哈希分区表或者复合哈希分区表的哈希子分区,你不能使用这个语句。


对于引用分区表,你不能合并分区。相反,父表的合并操作会级联到所有子表。尽管如此,当你在父表执行合并分区或者子分区操作时,你也可以使用DEPENDENT TABLES子句来为相关表设置特定属性。


如果涉及到的分区或者子分区包含数据,那么索引可能被标识为UNUSABLE,如下表所述:


合并范围分区


你可以将两个相邻的范围分区的内容合并到一个分区。不相邻的范围分区不能合并。合并生成的分区继承了这两个合并分区中更高的上限。


合并范围分区的一个原因是保持在线历史数据在较大的分区。例如,你可以有每日分区,然后将最旧的分区聚合为周分区,进而周分区可以聚合为月分区,等等。


4-31显示了一个合并范围分区的例子。
例4-31 合并范围分区


如果你省略了上述语句中的UPDATE INDEXES子句,那么你必须重建受影响分区的本地索引。


你可以将两个相邻的间隔分区的内容合并到一个分区。不相邻的间隔分区不能合并。第一个间隔分区也能喝最高的范围分区进行合并。合并生成的分区继承了这两个合并分区中更高的上限。


合并间隔分区总是导致转换点移动到这两个合并分区中更高的上限。结果是间隔分区表的范围分区扩展到这两个合并分区中更高的上限。任何边界低于新合并生成分区的物化间隔分区,都会自动转化到范围分区,并且使用它们的间隔分区上限定义作为范围分区上限。


例如,???虑一下间隔分区transactions


把数据插入到该表的间隔分区部分,这将会创建这些日期的间隔分区。需要注意的是,2007115日和2007116日的数据被存储到相邻的间隔分区。


接下来,合并两个相邻的间隔分区。新分区会再有一个系统生成的名称。


对于transactions表而言,转换点现在已经移动到了2007117日。该间隔分区表的范围分区部分包含两个范围分区:值小于200711日,以及值小于2007117日。值大于2007117日的数据将会存储在间隔分区表的间隔分区部分。?


当你合并列表分区时,本合并的分区可以是任意两个分区。它们不必像范围分区那样必须是相邻的,因为列表分区默认是没有顺序的。生成的分区由原来两个分区的数据组成。如果你将默认分区和其他分区进行合并,那么新生成的分区是默认分区。


下面的语句合并了一个列表分区表的两个分区,新生成的分区继承了所有表级别的默认属性。语句指定了MAXEXTENTS子句。


当你合并复合哈希分区时,子分区会根据哈希函数重新分布到由SUBPARTITIONS n或者SUBPARTITIONS子句指定数量的分区。如果两个都没有指定,那么就使用表级别的默认值。


需要注意的是,分割一个复合哈希分区(在“分割一个复合哈希分区”章节讨论)和合并两个复合哈希分区,在属性的继承方面是不一样的。当一个分区被分割时,新的分区可以继承原分区的属性,因为只有一个父节点。但是,当合并分区时,必须继承表级别属性。


对于间隔哈希分区表,你只能合并两个相邻的间隔分区,或者时最高范围分区和第一个间隔分区。如“合并间隔分区”所述,当你在间隔哈希分区表合并分区时,转换点时会移动的。


下面的例子合并了两个范围哈希分区:


?


你可以在分区级别合并分区,也可以在列表子分区级别合并子分区。


在复合列表分区表中合并分区如前面所论述的“合并范围分区”。但是,当你合并两个复合列表分区时,生成的新分区将继承子分区模版的子分区描述,前提是该模版存在。如果不存在子分区模版,那么将为新分区创建一个默认子分区。


对于间隔哈希分区表,你只能合并两个相邻的间隔分区,或者时最高范围分区和第一个间隔分区。如“合并间隔分区”所述,当你在间隔哈希分区表合并分区时,转换点时会移动的。


下面的语句合并了范围列表分区表stripe_regional_sales的两个分区。该表存在一个子分区模版。


对于新的分区,我们指定了一些新的物理属性,同时,对于那些没有指定的属性将会继承表级别的默认值。新生成的分区q1_q2_1999将会继承q2_1999分区的上限边界,并且子分区的值列表描述将会继承该表的子分区模版描述。?


新生成分区的数据由两个分区的数据组成。但是,可能存在数据库返回错误的情况。这个之所以会发生,可能是因为当同时满足下列条件时,数据可能会映射到新分区之外:


我们可以通过在默认子分区模版中指定一个默认分区来消除这个错误条件。?


你可以合并同一分区中的任意两个列表子分区的内容。由此生成的子分区值列表描述包括所有被合并分区的值。


下面的语句合并了范围列表分区表的两个子分区,并将新生成的子分区保存到表空间ts4:


原始的两个分区的值列表如下:


新生成子分区的值列表由上述两个子分区值列表的合集构成:


新生成子分区的存储表空间以及子分区属性都由分区级别的默认属性决定,除非你显式地指定。


如果任何现有地子分区名称被重复使用,那么新生成子分区将会继承名称被重复使用子分区的属性。


你可以在???区级别合并分区,也可以在范围子分区级别合并子分区。


在复合范围分区表中合并分区如前面所论述的“合并范围分区”。但是,当你合并两个复合范围分区时,生成的新分区将继承子分区模版的子分区描述,前提是该模版存在。如果不存在子分区模版,那么将会创建一个上限边界是MAXVALUE的新分区。


对于间隔范围分区表,你只能合并两个相邻的间隔分区,或者时最高范围分区和第一个间隔分区。如“合并间隔分区”所述,当你在间隔哈希分区表合并分区时,转换点时会移动的。


下面的语句合并了月份间隔范围分区表orders的两个分区。该表存在一个子分区模版。


如果20073月和4月的分区仍然在间隔范围分区表的间隔部分,那么合并操作将会把转换点移动到200751日。?


对于分区p_pre_may_2007而言,所有子分区都将从子分区模版中继承他们的属性。新生成分区的数据由两个分区的数据组成。但是,可能存在数据库返回错误的情况。这个之所以会发生,可能是因为当同时满足下列条件时,数据可能会映射到新分区之外:


我们可以通过在子分区模版中指定一个上限边界值为MAXVALUE的子分区来消除这个错误条件。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇ORA-00382与DB_nK_CACHE_SIZE参数.. 下一篇Oracle 11g维护分区(六)——Mod..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Announcing October (2025-12-24 15:18:16)
·MySQL有什么推荐的学 (2025-12-24 15:18:13)
·到底应该用MySQL还是 (2025-12-24 15:18:11)
·进入Linux世界大门的 (2025-12-24 14:51:47)
·Download Linux | Li (2025-12-24 14:51:44)