En este ejemplo, miro una razón por tener el error ORA-01502. Lo probé en Oracle 11.2.0.2.7. Creé una tabla en el tablespace SYSTEM por error:
SQL> create table andrews_table
2 tablespace system
3 as select * from dba_tables
4 /
Tabla creada.
SQL>
SQL> create index andrews_index
Creé un índice en la tabla y verifiqué que era válido:
SQL> create index andrews_index
2 on andrews_table(table_name)
3 /
Indice creado.
SQL> select status from user_indexes
2 where index_name = 'ANDREWS_INDEX'
3 /
STATUS
--------
VALID
SQL>
SQL> alter session
Le dije a Oracle de informarme sobre índices inutilizables:
SQL> alter session
2 set skip_unusable_indexes = false
3 /
Sesion modificada.
SQL>
SQL> select count(*) from andrews_table
Ejecuté una consulta para emplear el índice sin problemas:
SQL> select count(*) from andrews_table
2 where table_name = 'BLAH'
3 /
COUNT(*)
----------
0
SQL>
SQL> alter table andrews_table
Luego me di cuenta que la tabla estaba en el tablespace SYSTEM y la puse en el tablespace USERS, lo que invalidó el índice:
SQL> alter table andrews_table
2 move tablespace users
3 /
Tabla modificada.
SQL> select status from user_indexes
2 where index_name = 'ANDREWS_INDEX'
3 /
STATUS
--------
UNUSABLE
SQL>
SQL> select count(*) from andrews_table
Así cuando intenté a emplear el índice, tenía un error:
SQL> select count(*) from andrews_table
2 where table_name = 'BLAH'
3 /
select count(*) from andrews_table
*
ERROR en linea 1:
ORA-01502: el indice 'OPS$ORACLE.ANDREWS_INDEX' o una
particion del mismo estan en estado inutilizable
SQL>
SQL> alter index andrews_index rebuild
Después de reconstruir el índice, la consulta funcionó otra vez:
SQL> alter index andrews_index rebuild
2 /
Indice modificado.
SQL> select status from user_indexes
2 where index_name = 'ANDREWS_INDEX'
3 /
STATUS
--------
VALID
SQL> select count(*) from andrews_table
2 where table_name = 'BLAH'
3 /
COUNT(*)
----------
0
Excelente Explicacion. Muy Util.
ResponderEliminarHola Domingo,
EliminarGracias por tu comentario,
Un saludo
Andrew
Gracias, excelente me ha servido de ayuda.!
ResponderEliminar