Wednesday, August 26, 2009

ora-1502

Essa semana ocorreu inúmeras vezes o problema com index, uma mera coincidência.

Indexes não são como constraint que podem ser desabilitadas e depois habilitadas novamente, porém devido a uma carga ou dmls anteriores, o index pode ficar em estado de unusable.
Assim, caso o indexes conste como unusable, pode ser configurado para não ser usado através do parâmetro, skip_unusable_indexes, podendo tanto ser parametrizado para instância como para a sessão:

ALTER SESSION SET SKIP_UNUSABLE_INDEXES = TRUE;
ALTER SYSTEM SET SKIP_UNUSABLE_INDEXES = TURE;

Porém, se houver precedência sobre uma constraint que força o uso do index como a de unique, esse parâmetro será ignorado. (Constraint de unique causa a criação de index para evitar que sejam criados registros duplicados, em questão de performance pouco agrega ao db.)

Então se for o caso, não resta nenhuma outra opção se não a seguir o seguintes passos:

Vejamos o que a descrição o problema:

[oracle@hodb1z0050 ~]$ oerr ora 1502
01502, 00000, "index '%s.%s' or partition of such index is in unusable state"
// MERGE: 1489 RENUMBERED TO 1502
// *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


Solução:

Identificar os index com problema:

No alert deve ter uma entrada com o erro, ou podemos executar a seguinte query:
select OWNER||'.'||INDEX_NAME, TABLE_NAME, STATUS
from DBA_INDEXES
where STATUS = 'UNUSABLE';
Identificado o index com status unusable, basta realizar o rebuild do mesmo:
ALTER INDEX INDEX_NAME REBUILD;
Agora com o rebuild basta continuar com o trabalho sobre o db.

Por curiosidade procurei saber sobre rebuild de index em questão de performance, apesar da "economia" de espaço após realizar rebuild na base, em performance pouco se ganha, no ask tom há artigos interesante sobre o assunto.

Referencias:
http://www.db-innovations.co.uk/codetips_2.htm
http://www.databasedesign-resource.com/unique-constraints.html
http://download.oracle.com/docs/cd/B28359_01/server.111/b28310/indexes003.htm
http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:2290062993260

No comments: