Pular para o conteúdo
  • Este tópico contém 6 respostas, 5 vozes e foi atualizado pela última vez 16 anos, 9 meses atrás por David Siqueira.
Visualizando 7 posts - 1 até 7 (de 7 do total)
  • Autor
    Posts
  • #85552
    JamirJr
    Participante

      Olá pessoal,

      preciso dropar algumas colunas de uma tabela, mas esta tabela é usada o tempo todo pelo sistema. O Oracle bloqueia a tabela para realizar esta operação? Terei q parar o sistema, ou seja, a utilização da tabela? Qual a melhor forma para fazer isso?

      Muito obrigado

      #85553
      Ishii
      Participante

        Olá,

        Sim, o Oracle irá bloquear todos os acessos (lock) até finalizar o drop column.

        Crie uma rotina e agende via job ou scheduler para rodar num horário mais tranquilo.

        []s Ishii

        #85554
        JamirJr
        Participante

          e no caso de usar este SET UNUSED Clause, quais são os beneficios x restricoes x prejuizos ?

          Valew!!!

          #85557
          Marcio68Almeida
          Participante

            Lembrar também que, ao remover coluna você invalidará algum índice que se referencie a essa coluna, assim como procedures e funções…

            #85558
            David Siqueira
            Participante

              Cara, tudo bem!!!
              Conforme algumas notas que já li sobre SET UNUSED, ele apenas vai marcar a coluna e os dados dela para serem elminados quando os acessos ao objeto e os processos que envolvem o objeto cessarem ou diminuirem ao ponto de você poder remover a coluna com segurança. Quanto aos beneficios eu acho que é apenas pelo fato de poder fazer “online” sem gerar uma indisponibilidade para tal , os prejuizos é que se precisar voltar esses dados dessa coluna você terá um pouco mais de trabalho, visto que ao ustilizar essa opção você avisa ao dicionário do Banco de Dados pra se preparar para que aquela coluna seja ignorada quando for acessada a tabela que a possui, e ha quem diga em notas de outros forúns que via chamado na Oracle conseguiram recuperar os dados dessa coluna mesmo após o comando.
              Bem o que eu sei é isso, espero ter ajudado.
              Boa Sorte!!!
              Abcs
              David.

              #85565
              Rodrigo Almeida
              Participante

                Bom,

                Na minha opinião pode fazer o seguinte:

                1) Verifique os índices que essa coluna é utilizada. Exemplo:

                SQL> select * from dba_ind_columns where column_name = ‘NOME_COLUNA’;

                2) Se estiver tudo ok, faça o UNUSED COLUMN. Pois a Oracle “inventou” esse recurso justamente para isso, pois ao efetuar o DROP COLUMN diretamente, sua tabela inteira fica em LOCK EXCLUSIVE para o seu usuário e isso pode demorar muito!!!!

                Então, faça o UNUSED COLUMN e depois o DROP UNUSED COLUMNS em um FDS ou janela agendada de manutenção!

                Abraços,
                Rodrigo Almeida

                #85577
                David Siqueira
                Participante

                  Vale a pena dar uma lida nesse paper:

                  http://www.oracle-base.com/articles/8i/DroppingColumns.php

                  Abcs.

                  David

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