Pular para o conteúdo
  • Este tópico contém 4 respostas, 2 vozes e foi atualizado pela última vez 3 anos, 8 meses atrás por Avatar de José Laurindo ChiappaJosé Laurindo Chiappa.
Visualizando 5 posts - 1 até 5 (de 5 do total)
  • Autor
    Posts
  • #146923
    Avatar de lucianoafrlucianoafr
    Participante

      Boa noite, alguém já passou por esse erro que não faz sentido algum?

       

      SQL> ALTER TABLE prd_acd.PW_FILE_UPDOWNLOAD DROP COLUMNS CONTINUE;
      ALTER TABLE prd_acd.PW_FILE_UPDOWNLOAD DROP COLUMNS CONTINUE CHECKPOINT 500
      *
      ERROR at line 1:
      ORA-00955: name is already used by an existing object

       

      já no ALTER TABLE prd_acd.PW_FILE_UPDOWNLOAD DROP COLUMN <coluna>;, deu erro… ai tentei com o set unused que também não funcionou.

       

      Agora a tabela não funciona nem para select e estou com vários objetos inválidos por conta disso… produção parada.

      Se alguém puder ajudar, agradeço.

      #146924
      Avatar de José Laurindo ChiappaJosé Laurindo Chiappa
      Moderador

        Blz ? Não, eu nunca vi isso mas antes de mais nada : pra que algo do tipo seja minimamente possível, eu estou SUPONDO aqui um banco bem ** mal-administrado **, largado mesmo, com tablespaces gerenciadas por dicionário, CHEIO de fragmentação e/ou white space ou espaço acima da HWM, onde NUNCA foi rodado um script de healthcheck , nunca foram coletadas estatísticas das tabelas internas, onde usuário cria objetos na tablespace SYSTEM, nunca foi rodado com a frequência necessária um DBV, enfim, bagunça quase completa…. Nesse cenário, Não Dá pra descartar simples Corrupção do dicionário de dados, e isso é coisa que só o Suporte da Oracle pode atuar : assim sendo, MESMO que algum dos work-arounds que vou indicar abaixo funcione, eu RECOMENDO FORTEMENTE abertura de chamado no Suporte Oracle, demorô pra fazer isso, ESPECIALMENTE se a sua “produção” está parada….
        Isso posto :

        1. a primeira alternativa normalmente seria setar a coluna em questão como UNUSED, e depois pedir um DROP UNUSED (mais ou menos cfrme feito em https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:623063677753 ) – veja lá se isso te ajuda…
        2. se a alternativa acima não funcionar, estamos em situação de Salvage, vamos tentar salvar o que pudermos dos dados dessa tabela em outra , truncar e dropar (ou dropar direto, SEMPRE com opção de PURGE, imho não faz sentido deixar coisas corrompidas na recycle bin) …
          Pra fazer isso, PRIMEIRO vc vai tentar passar os dados da tabela pra outra fonte : um SELECT (pra ser usado num CREATE TABLE outronome AS SELECT FROM tabelacorrompida) que não mencione a coluna que está meio dropada, funciona ?? Se sim, faça isso , depois drop da tabela (o que PODE exigir desabilitar constraints de FK em outras, recriar MVs, etc) e voltar esses dados…
          Se qquer tipo de SELECT, mesmo não mencionando a dita-cuja coluna, for impossível , aí chegamos na questão de um milhão : vc tem backup ? Tem export/dump de dados ? Se tiver algum desses itens, proceder com a volta dos dados… Se não tiver, OU vc contrata o serviço de Recuperação de dados da Oracle (que vai usr um software chamado ODU, Oracle Data Unloader) pra extrair os dados diretamente dos blocos, SEM select) OU vc assume o erro e perde os dados, dropando a tabela direto….

        Seria basicamente isso que penso neste momento….

        []s

        Chiappa

        #146925
        Avatar de lucianoafrlucianoafr
        Participante

          Bom dia.

          É, o banco não está tão mal administrado assim e tudo que vc relacionou e mais algumas coisas são feitas regularmente. E como pode ver no texto do post, o lance do unused já foi utilizado e o DROP COLUMNS CONTINUE deixa isso implícito.

          Bom, vamos esperar o suporte da Oracle.

           

          Obrigado por seu tempo.

          #146926
          Avatar de José Laurindo ChiappaJosé Laurindo Chiappa
          Moderador

            Oi – se vc REALMENTE roda DBVs (e talvez exports fulls sem dados, só pra exercitar o dicionário) regularmente, as suas tablespaces (principalmente a SYSTEM) não são gerenciadas por dicionário, não há fragmentação nem white space nem espaço significativo acima da HWM na tablespace SYSTEM E vc ccoleta estatísticas nos objetos internos do banco, só sobra BUGs como causa : dá uma consultada no metalink/my oracle support que vc acha uns tantos quantos bugs que podem causar um drop column demorado exageradamente…. E Com Certeza, a Primeira coisa que o Suporte da Oracle VAI te exigir é aplicação dos últimos conjuntos de patches BEM COMO dos bugfixes que causam esse tipo de sintoma, eu Recomendo que vc já se adiante e pesquise isso no metalink/mos….
            E óbvio#2, como eu disse Independente do trabalho do Suporte, é recomendado vc já tentar ver o que vc consegue de RECUPERAÇÃO dos dados dessa tabela, seja via backup, seja via CTAS, seja via algum dump de dados anterior que vc tenha, já vai vendo isso enquanto aguarda o Suporte responder…

            []s

            Chiappa

            #146927
            Avatar de José Laurindo ChiappaJosé Laurindo Chiappa
            Moderador

              Umas dicas a mais, que talvez te ajudem :

              1. por mais que haja bug e/ou corrupção envolvidos, fiquei encafifado com essa msg do name is already used by an existing object : veja se não há uma coluna OCULTA (ou coluna virtual/calculada) nessa tabela com o mesmo nome da coluna que vc está tentando o DROP, ou algo no estilo… Aproveita também para consultar sinônimos (públicos ou privados) que apontem pra essa tabela e coluna, E também verifique se há segmentos (como ÍNDICES, ou LOB SEGMENTs, por exemplo) que referenciem essa coluna aí
              2. consulte a DBA_DEPENDENCIES, DBA_VIEWS, DBA_TRIGGERS, Views materializadas , etc, e veja QUEM (afora código PL/SQL, focando aqui em objetos criados via SQL e mantidos pelo database) depende dessa coluna dessa tabela : pode ser que o bug seja msg de erro errada, tipo : há um outro objeto que depende dessa coluna dessa tabela e aí por erro o RDBMS tá dando essa msg genérica ao invés de dar uma msg apropriada

              3. consulta a DBA_PARTIAL_DROP_TABS, para ver se obtém Confirmação que realmente essa tabela tá com uma operação de DROP (DROP COLUMN no caso) só parcialmente realizada (provavelmente por conta de algum crash interno, bug ou situação inesperada do tipo) : se for isso mesmo, claro que só o Suporte vai poder te orientar a fazer a necessária limpeza / correção no dicionário de dados, mas essa confirmação pode ser útil

              []s

              Chiappa

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