- Este tópico contém 12 respostas, 2 vozes e foi atualizado pela última vez 19 anos, 10 meses atrás por
Anônimo.
-
AutorPosts
-
4 de maio de 2006 às 5:28 pm #75639
Anô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ônimo
Recrie o indice:
alter index owner.index rebuild;
Abraço.
5 de maio de 2006 às 11:46 pm #75657armandoveloso
ParticipanteCaro 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ônimo
Armando,
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ônimo
Caro 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ônimo
antes 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ônimo
BOM DEMAIS O “dbms_metadata.get_ddl”!!!
para que mais eu posso utiliza-lo?
8 de maio de 2006 às 7:19 pm #75669Anônimo
serve pra indices, views, materialized vies, tables etc.
Abraço.
9 de maio de 2006 às 7:27 pm #75681Anônimo
nao 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ônimo
Dessa 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ônimo
rosterne,
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ônimo
Dê:
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.