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"

Responder a