Só para complementar a resposta do chiappa, a operação de shrink internamente faz delete e depois insert nas linhas de tabelas que são movimentadas. No índice deve funcionar de forma parecida e por isso, a geração de UNDO!
Não aconselho a usar COALESCE, o SHRINK é mais eficiente e o REBUILD mais ainda, porém o impacto do REBUILD é muito grande (consome muito processamento) e por isso ele é evitado em muitos ambientes de produção! []s Fábio Prado www.fabioprado.net Em 9 de setembro de 2013 13:52, J. Laurindo Chiappa <jlchia...@yahoo.com.br>escreveu: > ** > > > Opa : eu tinha respondido mas ao que parece a internet comeu minha > resposta : então estou re-enviando, e desde já me desculpo com quem receber > 2x ... > > Bom, dando de barato que vc já verificou e **** REALMENTE PROVOU **** que > precisa da movimentação (por exemplo, cfrme > http://richardfoote.wordpress.com/2008/02/08/index-rebuild-vs-coalesce-vs-shrink-space-pigs-3-different-ones/a > sua aplicação deletou uma porção Significatica de linhas, cujos valores > ** não ** vão ser reusados, talvez porque sequenciais/artificiais, E o > acesso não é single-row, ou coisa do tipo), NÂO estando portanto seguindo > algum 'tutorial' na base do achômetro e/ou da autoridade tipo > eu-sou-o-expert (que é Muito Comum quando se fala de 'fragmentação', é o > tipo do tópico que todo mundo Acha que sabe mas na prática muitos só > perpetuam mitos furados), aí temos que SIM, qualquer tipo de movimentação > de blocos VAI gerar algum UNDO e algum REDO, nem que seja para as tabelas > internas do RDBMS, que são SIM em sua maioria protegidas / transacionadas > do mesmo modo que as tabelas de usuário... > Aí eu digo : > > a) vc deveria checar no Suporte Oracle por possibilidades como o Bug > 3888229 : HUGE REDO AND UNDO GENERATED DURING A TABLE SHRINK OPERATION , e > similares : não é provável (até dada a antiguidade e a especifidade de > plataforma),mas é possível que vc esteja vendo um re-run ...... > > b) já que vc tem a opção de "fechar todos os aplicativos que acessam a > instância", para tentar diminuir o redo vc pode experimentar um INDEX > REBUILD NOLOGGING PARALLEL - via de regra isso não interfere grande coisa > (até porque a diminuição Efetiva é numa operação de APPEND, que só pode > ocorrer em tabelas - índices sempre tem que ser Ordenados fisicamente, não > dá pra apendar), mas vale a tentativa > > c)vc TESTOU as Outras opções de movimentação/reordenação do índice, como > COALESCE, além do REBUILD em si, cfrme alguns artigos em > http://richardfoote.wordpress.com/category/index-shrink/ do índice ?? E > as opções de redefinição da tabela em si (como DBMS_REDEFINE, INSERT /*+ > APPEND */, etc) , talvez até numa outra tabela-temporária vazia que depois > de dropar a tabela original vc a renomearia ??? > Como eu não trabalho com Standard Edition, não faço idéia de quais opções > dessa lista estariam vedadas para vc, mas é algo a checar... > > d) sobre o UNDO especificamente, vc TEM Certeza que não tinha aí nenhuma > outra Transação aberta usando o tal índice e/ou a tabela a qual o índice > pertence ??? OU AINDA, uma situação COMUNÍSSIMA , será que vc não teria ** > OUTRAS TRANSAÇÕES quaisquer ** de modo geral consumindo o UNDO, OU mesmo > Transações que acabaram há pouco tempo e portanto ainda não puderam liberar > o espaço devido ao RETENTION ainda não cumprido, caso em que (OBVIAMENTE) > vc Não teria os 5 GB todos disponíveis para uso ??? QUAL é o tamanho da > tabela E do índice, em bytes, por falar nisso ?? > DEPENDENDO dessas respostas, talvez a melhor opção seja vc simplesmente > temporariamente criar uma nova undo tablespace bem maior, a usar para a > movimentação e depois a dropar... > > []s > > Chiappa > > --- Em oracle_br@yahoogrupos.com.br, "Grupos" <marcio_cbj@...> escreveu > > > > > Bom dia! > > > > > > > > Oracle 10.2.0.5 Standard Edition one > > > > > > > > Tentei fazer um shrink en um índice, e deu erro no UNDO. O meu UNDO está > > com tamanho de 5G, ele estava vazio no momento do shrink, pois antes de > > começar tirei a minha instância do ar, e fechei todos os aplicativos que > > acessam a instância. > > > > > > > > Além de ocupar toda a minha área de UNDO, é gerado muitos archives. Tem > > alguma maneira de executar o shrink sem ocupar tanto o UNDO e gerar > muitos > > archives? > > > > > > > > Vi que tem a opção nologging no rebuild online, mas essa feature está > apenas > > para o EE. Para o Standard One, alguém conhece alguma maneira de fazer os > > shrink para corrigir a fragmentação nas minhas tabelas e índices que não > > gere muito UNDO? > > > > > > > > Grato. > > > > > -- Fábio Prado www.fabioprado.net "Compartilhando conhecimentos e treinando profissionais em Bancos de Dados Oracle"