Before discussing the individual maintenance operations for partitioned tables and indexes, it is important to discuss the effects of the UPDATE
INDEXES
clause that can be specified in the ALTER
TABLE
statement.
By default, many table maintenance operations on partitioned tables invalidate (mark UNUSABLE
) the corresponding indexes or index partitions. You must then rebuild the entire index or, for a global index, each of its partitions. The database lets you override this default behavior if you specify UPDATE
INDEXES
in your ALTER
TABLE
statement for the maintenance operation. Specifying this clause tells the database to update the indexes at the time it executes the maintenance operation DDL statement. This provides the following benefits:
The indexes are updated with the base table operation. You are not required to update later and independently rebuild the indexes.
The global indexes are more highly available, because they are not marked UNUSABLE
. These indexes remain available even while the partition DDL is executing and can access unaffected partitions in the table.
You need not look up the names of all invalid indexes to rebuild them.
Optional clauses for local indexes let you specify physical and storage characteristics for updated local indexes and their partitions.
You can specify physical attributes, tablespace storage, and logging for each partition of each local index. Alternatively, you can specify only the PARTITION
keyword and let the database update the partition attributes as follows:
For operations on a single table partition (such as MOVE
PARTITION
and SPLIT
PARTITION
), the corresponding index partition inherits the attributes of the affected index partition. The database does not generate names for new index partitions, so any new index partitions resulting from this operation inherit their names from the corresponding new table partition.
For MERGE
PARTITION
operations, the resulting local index partition inherits its name from the resulting table partition and inherits its attributes from the local index.
For a composite-partitioned index, you can specify tablespace storage for each subpartition.
The update_all_indexes_clause
of ALTER TABLE
for the syntax for updating indexes
The following operations support the UPDATE
INDEXES
clause:
ADD
PARTITION
| SUBPARTITION
COALESCE
PARTITION
| SUBPARTITION
DROP
PARTITION
| SUBPARTITION
EXCHANGE
PARTITION
| SUBPARTITION
MERGE
PARTITION
| SUBPARTITION
MOVE
PARTITION
| SUBPARTITION
SPLIT
PARTITION
| SUBPARTITION
TRUNCATE
PARTITION
| SUBPARTITION
SKIP_UNUSABLE_INDEXES Initialization Parameter
SKIP_UNUSABLE_INDEXES
is an initialization parameter with a default value of TRUE
. This setting disables error reporting of indexes and index partitions marked UNUSABLE
. If you do not want the database to choose an alternative execution plan to avoid the unusable elements, then you should set this parameter to FALSE
.
Considerations when Updating Indexes Automatically
The following implications are worth noting when you specify UPDATE
INDEXES
:
The partition DDL statement can take longer to execute, because indexes that were previously marked UNUSABLE
are updated. However, you must compare this increase with the time it takes to execute DDL without updating indexes, and then rebuild all indexes. A rule of thumb is that it is faster to update indexes if the size of the partition is less that 5% of the size of the table.
The EXCHANGE
operation is no longer a fast operation. Again, you must compare the time it takes to do the DDL and then rebuild all indexes.
When you update a table with a global index:
The index is updated in place. The updates to the index are logged, and redo and undo records are generated. In contrast, if you rebuild an entire global index, you can do so in NOLOGGING
mode.
Rebuilding the entire index manually creates a more efficient index, because it is more compact with better space utilization.
The UPDATE INDEXES
clause is not supported for index-organized tables. However, the UPDATE GLOBAL INDEXES
clause may be used with DROP
PARTITION
, TRUNCATE
PARTITION
, and EXCHANGE
PARTITION
operations to keep the global indexes on index-organized tables usable. For the remaining operations in the above list, global indexes on index-organized tables remain usable. In addition, local index partitions on index-organized tables remain usable after a MOVE
PARTITION
operation.