Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Armando Veloso

Erro ORA-01502 !!!

Recommended Posts

enho uma aplicação em VB que acessa base Oracle 9i. Esta dando o erro abaixo ao tentar inserir um registro: " Operação não completada! Descrição: ORA-01502: índice 'OWNER.INDICE' ou a sua partição está em estado não-utilizável' " Alguem pode me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Armando,

 

Simples resolver isso, esse problema está lhe aparacendo porque o índice da tabela que voc ê está executando o SELECT está com status UNASABLE, devido alguns motivos como:

 

- Se for tabela particionada e índice criado for GLOBAL, se adicionou novas partições na tabela, seu índice ficou inválido.

 

- Caso seja um índice LOCAL, houve alguma mudança de TABLESPACE que deixou inválido.

 

Para solucionar basta fazer o seguinte, acesse a base de dados e siga os passos :

 

SQL > SELECT owner, index_name, status FROM user_indices WHERE status = 'UNUSABLE';

Após achar seu índice, faça um rebuild:

 

SQL > alter index INDEX_NAME rebuild;

Caso seja índices particionados, faça a seguinte instrução:

 

SQL > SELECT a.table_name, b.index_name, b.partition_name, b.status   2	  FROM user_indexes a, user_ind_partitions b   3	  WHERE a.index_name=b.index_name and b.status = 'UNASABLE';

Como o índice normal, recostrua ele:

 

 SQL > alter index INDEX_NAME rebuild partition NOME_DA_PARTICAO;

Se tiver mais dúvidas poste aqui.

 

Abraços, http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela atenção RIACRDO,mas nao há indices com status UNusable!veja: 1 select status, count(*) 2 from dba_indexes 3* group by statusSQL> /STATUS COUNT(*)-------- ----------N/A 24VALID 1996

Compartilhar este post


Link para o post
Compartilhar em outros sites

E que na view DBA_INDEXES o status vem diferente, veja o exemplo:

 

 

SQL> select status, count(status)  2  from dba_indexes  3  group by status;STATUS   COUNT(STATUS)-------- -------------N/A				 35VALID			 1105SQL> l  1  select status, count(status)  2  from dba_indexes  3* group by statusSQL> l 2  2* from dba_indexesSQL> c/dba_indexes/dba_ind_partitions/  2* from dba_ind_partitionsSQL> /STATUS   COUNT(STATUS)-------- -------------UNUSABLE			 8USABLE			 298SQL>

Agora veja todos os índices que estão com status diferente de USABLE e VALID e reconstrua eles como informei no primeiro tópico.

 

Abraços, :P

Compartilhar este post


Link para o post
Compartilhar em outros sites

Armando, você tentou executar o SELECT novamente na tabela e ele lhe retorno algum erro. No erro 01502 irá informar o nome do Índice que pode ser Particionado ou não. Depois verifique o status do índice que ele mencionar sobre o OWNER (Usuário) mencionado. Abraços, :huh:

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.