本章节包含以下主题:
注意:
以下各节讨论分区表的维护操作,这些维护操作会影响到索引或索引分区的可用性,考虑以下几点:
表4-1列出了可以对分区表和复合分区表进行的维护操作,表4-2列出子分区维护操作可以对分区表进行复合。对于每种类型的分区和分区,都列出了维护操作中用到的ALTER TABLE语句的具体子句。
表4-1分区表的ALTER TABLE维护操作
表4-2子分区表的ALTER TABLE维护操作
注意:
当您第一次使用表压缩,将压缩分区引入一个包含位图索引并且只包含未压缩分区的分区表,你必须做到以下几点:
分区是否包含数据,和引入压缩分区的操作是相互独立的。
另外,这并不适用于包含B-tree索引的分区表以及分区索引组织表。
表4-3列出了可以对索引分区进行的维护操作,并指出可以操作的索引类型(全局或局部)。而且,还列出了用于维护操作的ALTER INDEX子句。
全局索引并不反映基表的结构。如果分区,它们可通过范围或散列进行分区。全局分区索引可以共享在分区表上的部分操作,而不是全部。
由于本地索引反映了基表的结构,在对分区或者子分区进行维护操作时,索引分区会自动被维护。因此,维护本地索引分区的必要性大打折扣,并且相应的选项也很少。
表4-3 索引分区的ALTER INDEX维护操作
在讨论针对分区表和索引的各个维护操作之前,讨论一下可以在ALTER TABLE语句中指定的UPDATE INDEXES子句的影响,是十分重要的。
默认情况下,分区表上的很多维护操作都会使相关的索引或索引分区无效(标识为)UNUSABLE。你必须重建整个索引,或者对于一个全局索引,或者对于每一个分区索引。如果你在ALTER TABLE语句中指定了UPDATE INDEXES子句,数据库会默认这行这些操作。指定UPDATE INDEXES子句会告诉数据库当执行DDL维护操作时的同时去更新索引。这提供了以下优点:
在更新本地索引及其分区时,你可以通过可选子句来指定物理和存储特性。
你可以为每个本地索引的每个分区指定物理特性、表空间存储以及日志特性。或者,你可以只指定PARTITION关键字,让数据库按照以下原则来更新分区特性:
以下子句可以指定UPDATE INDEXES子句:
SKIP_UNUSABLE_INDEXES是默认设置为TRUE的初始化参数。当索引或者索引分区被标识为UNUSABLE时,该设置禁止由此产生的错误报告。如果你不希望数据库选择其他的执行计划,以避免无法使用的索引,那么你应该将此参数设置为FALSE。
当指定UPDATE INDEXES子句时,需要注意以下事项:
分区DDL语句需要更长的时间来执行,因为先前标记为UNUSABLE的索引需要进行更新。尽管如此,你必须比较它与与执行DDL操作然后重新生成所有索引的时间。一个经验法则是,如果该分区的大小小于该表大小的5%,自动更新索引还是相对较快的。
删除、阶段和交换操作不再是快速操作,同样的,你需要比较一下二者的时间。
当你更新包含全局索引的表时:
索引被更新,同时更新操作生成日志记录,并产生redo和undo日志。相反,如果你重建整个全局索引,你可以在NOLOGGING模式下进行操作。
手动重建整个索引将会生成一个更有效的索引,因为它更紧凑,提高空间利用率。
索引组织表不支持UPDATE INDEXES子句。但是,为了保持索引组织表的全局索引的可用性,在执行删除分区、截断分区和交换分区操作时,需要指定UPDATE GLOBAL INDEXES子句。对于上述列表中的其余操作,索引组织表的全局索引保持可用。此外,索引组织表的本地索引分区在执行MOVE PARTITION操作之后仍然可用。