- Este tópico contém 12 respostas, 2 vozes e foi atualizado pela última vez 18 anos, 8 meses atrás por Anônimo.
-
AutorPosts
-
4 de maio de 2006 às 5:28 pm #75639Anônimo
Tenho 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?
4 de maio de 2006 às 10:02 pm #75647AnônimoRecrie o indice:
alter index owner.index rebuild;
Abraço.
5 de maio de 2006 às 11:46 pm #75657armandovelosoParticipanteCaro rosterne,
o REBUILD foi feito, parou o problema, depois VOLTOU a dar o mesmo erro!
6 de maio de 2006 às 12:02 am #75659AnônimoArmando,
O problema acontece geralmente ao usar um caminho direto para o sQL*Loader, a carga direta ou as operações de DDL. Isto requer bastante espaço temporário para construir todos os índices da tabela. Se não houver espaço suficiente na tablespace TEMP, todas as linhas serão carregadas e importadas, mas os índices são deixados com o STATUS = INVALID.
Não sei se esse é o seu caso.
Ao invés de dar um REBUILD, você pode dropar o indice e recria-lo.
Abraço.
8 de maio de 2006 às 6:13 pm #75665AnônimoCaro rosterne,
qual a melhor forma de RECRIAR os indices, ja que nao tenho os scripts de criação?
devo montar um script com um select na tabela DBA_IND_CLUMNS ?
os drops sao mais simples de criar, creio que basta montar script com select na tabela DBA_INDEXES..
Obrigado!
8 de maio de 2006 às 6:23 pm #75666Anônimoantes de dropar faça:
set long 1000
set pagesize 1000- select dbms_metadata.get_ddl(‘INDEX’, ‘NOMEDOINDICE’, ‘PROPRIETÁRIO’) from dual;
Copie o ddl e depois
- drop index NOMDEDOINDICE;
-
use o ddl copiado;
Abraço.
8 de maio de 2006 às 6:29 pm #75667AnônimoBOM DEMAIS O “dbms_metadata.get_ddl”!!!
para que mais eu posso utiliza-lo?
8 de maio de 2006 às 7:19 pm #75669Anônimoserve pra indices, views, materialized vies, tables etc.
Abraço.
9 de maio de 2006 às 7:27 pm #75681Anônimonao sei se existe forma melhor..
mas no caso de criação de PKs (sao indices!), vi que o parametro ‘INDEX’ deve ser alterado para ‘CONSTRAINT’, sob pena de sair a DDL do tipo “CREATE UNIQUE INDEX’ para as PKs…
entao, como na USER_INDEXES nao tem como ver se sao indices do tipo PRIMARY KEYS, fiz cruzamento com a USER_CONSTRAINTS, veja:
SELECT DBMS_METADATA.GET_DDL(‘CONSTRAINT’,ui.index_name)
FROM USER_INDEXES ui, user_CONSTRAINTS uc
where ui.CONSTRAINT_TYPE = uc.CONSTRAINT_TYPE
and uc.CONSTRAINT_TYPE = ‘P’deu certo.. se tiver forma melhor, me diz por favor…
OBS: to tendo problema com o SCRIPT gerado, que quebra a primeira linha do comando, as vezes bem no meio do nome da PK, entao da erro na hora de rodar esse script pra criar as PKs…
Armando.
9 de maio de 2006 às 7:29 pm #75682Anônimo
DESCUPA, O COMANDO CORRETO É ESSE:
SELECT DBMS_METADATA.GET_DDL(‘CONSTRAINT’,ui.index_name)
FROM USER_INDEXES ui, user_CONSTRAINTS uc
where ui.INDEX_NAME = uc.CONSTRAINT_NAME
and uc.CONSTRAINT_TYPE = ‘P’9 de maio de 2006 às 7:52 pm #75683AnônimoDessa forma dá sim pra fazer.
Pra ver DDL todo, aumente seu o parâmetro LONG:
set long XXXXXX
Abraço.
10 de maio de 2006 às 4:46 pm #75689Anônimorosterne,
coloquei “set long 1000”, e vejo todo o comando!
no script gerado aparece o comando completo.. SÓ QUE TA QUEBRANDO A LINHA NO MEIO DO NOME DAS CONSTARINTS!aí da erro na execução!
10 de maio de 2006 às 5:11 pm #75690AnônimoDê:
SET LINE 9000
SET LONG 1000
SET PAGESIZE 1000Caso isso não resolva, edite o DDL.
Após utilizar a package DBMS_METADATA, copie, cole e execute no próprio Sqlplus.
Caso gere esse erro que você descreveu, no próprio Sqlplus, dê ED e aperte ENTER.
lá vc poderá edita-lo.
Espero ter ajudado.
-
AutorPosts
- Você deve fazer login para responder a este tópico.