SQL*Loader leaves indexes in an Index Unusable state when the data segment being loaded becomes more up-to-date than the index segments that index it.
Any SQL statement that tries to use an index that is in an Index Unusable state returns an error. The following conditions cause a direct path load to leave an index or a partition of a partitioned index in an Index Unusable state:
SQL*Loader runs out of space for the index and cannot update the index.
The data is not in the order specified by the SORTED
INDEXES
clause.
There is an instance failure, or the Oracle shadow process fails while building the index.
There are duplicate keys in a unique index.
Data savepoints are being used, and the load fails or is terminated by a keyboard interrupt after a data savepoint occurred.
To determine if an index is in an Index Unusable state, you can execute a simple query:
SELECT INDEX_NAME, STATUS FROM USER_INDEXES WHERE TABLE_NAME = 'tablename';
If you are not the owner of the table, then search ALL_INDEXES
or DBA_INDEXES
instead of USER_INDEXES
.
To determine if an index partition is in an unusable state, you can execute the following query:
SELECT INDEX_NAME, PARTITION_NAME, STATUS FROM USER_IND_PARTITIONS WHERE STATUS != 'VALID';
If you are not the owner of the table, then search ALL_IND_PARTITIONS
and DBA_IND_PARTITIONS
instead of USER_IND_PARTITIONS
.