Pular para o conteúdo
Visualizando 13 posts - 1 até 13 (de 13 do total)
  • Autor
    Posts
  • #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?

      #75647
      Anônimo

        Recrie o indice:

        alter index owner.index rebuild;

        Abraço.

        #75657
        armandoveloso
        Participante

          Caro rosterne,

          o REBUILD foi feito, parou o problema, depois VOLTOU a dar o mesmo erro!

          #75659
          Anô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.

            #75665
            Anô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!

              #75666
              Anô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.

                #75667
                Anônimo

                  BOM DEMAIS O “dbms_metadata.get_ddl”!!!

                  para que mais eu posso utiliza-lo?

                  #75669
                  Anônimo

                    serve pra indices, views, materialized vies, tables etc.

                    Abraço.

                    #75681
                    Anô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.

                      #75682
                      Anô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’

                        #75683
                        Anônimo

                          Dessa forma dá sim pra fazer.

                          Pra ver DDL todo, aumente seu o parâmetro LONG:

                          set long XXXXXX

                          Abraço.

                          #75689
                          Anô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!

                            #75690
                            Anônimo

                              Dê:

                              SET LINE 9000
                              SET LONG 1000
                              SET PAGESIZE 1000

                              Caso 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.

                            Visualizando 13 posts - 1 até 13 (de 13 do total)
                            • Você deve fazer login para responder a este tópico.
                            plugins premium WordPress