The Oracle docs note this on the
ORA-01502 error:
ORA-01502: index "string.string" or
partition of such index is in unusable state
Cause:
An attempt has been made to access an index or index
partition that has been marked unusable by a direct load or
by a DDL operation
Action: DROP the specified
index, or REBUILD the specified index, or REBUILD the
unusable index partition
The ORA-01502 error can be easily fixed by issuing the alter index
index_name rebuild partition partition_name;
To learn how to rebuild unusable partitioned indexes see these notes on
Oracle index partition
management.
ORA-01502 and skip_unusable_indexes
In previous releases of Oracle, the skip_unusable_indexes
parameter could only be used at session level and the default value was
False. Now, you will be able to set this parameter at session level and
instance level as well.
By setting the value of the skip_unusable_indexes=true, the
optimizer selects an execution plan that does not utilize unusable indexes,
preventing ORA-01502 errors.
However, when you skip an index you risk getting a sub-optimal SQL
execution plan. And since the SQL statement generates no error, the end-user
is unaware that the optimizer has chosen a plan that was less than optimal
and only notices excessive response time.
When you skip an unusable index, the database records an error message in
the alert log file whenever an index is marked unusable.
ORA-01502 and sqlldr
The ORA-01502
can happen while using SQL Loader. They continued to have problems with ORA-01502
(being thrown along with ORA-01452), even after trying to, "load the same record
twice (Just 2 lines in the data file to be loaded)...it accepted that...and
change the length of the last field (from 3 to 4), but when I see the data using
select statement they look exactly the same!!!"
After one quick reply to simply fix the duplicate data, Burleson offered
these easy to follow steps concerning row duplication detection:
1 - Drop the offending index and load the data.
2 - Run a script to detect duplicate rows:
http://www.remote-dba.cc/oracle_tips_duplicate_rows.htm
3 - Remove the rows and rebuild the index
Need another helpful link? Try this concerning
unusable indexes: