- Este tópico contém 6 respostas, 5 vozes e foi atualizado pela última vez 16 anos, 9 meses atrás por
David Siqueira.
-
AutorPosts
-
3 de março de 2009 às 10:31 pm #85552
JamirJr
ParticipanteOlá 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
3 de março de 2009 às 10:35 pm #85553Ishii
ParticipanteOlá,
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
4 de março de 2009 às 12:02 am #85554JamirJr
Participantee no caso de usar este SET UNUSED Clause, quais são os beneficios x restricoes x prejuizos ?
Valew!!!
4 de março de 2009 às 3:50 pm #85557Marcio68Almeida
ParticipanteLembrar também que, ao remover coluna você invalidará algum índice que se referencie a essa coluna, assim como procedures e funções…
4 de março de 2009 às 3:50 pm #85558David Siqueira
ParticipanteCara, 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.4 de março de 2009 às 4:32 pm #85565Rodrigo Almeida
ParticipanteBom,
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 Almeida4 de março de 2009 às 6:01 pm #85577David Siqueira
ParticipanteVale a pena dar uma lida nesse paper:
http://www.oracle-base.com/articles/8i/DroppingColumns.php
Abcs.
David
-
AutorPosts
- Você deve fazer login para responder a este tópico.