okdoc : olhando os seus dados de espaço livre, tá Claro que, já que o teu primeiro extent livre começa no bloco 1377, então tá Claro que vc TEM DADOS de algum tipo (índices, tabelas, o que for - vc diz que são índices, okdoc) dos blocos 1 a 1376, , depois vc tem esse pedaço pedaço livre, depois MAIS um pedação livre no bloco 1407, aí vai : o seu datafile está mais ou menos assim (supondo que "." são blocos livres e "x" são blocos com dados :
xxxxxxxxxxxxxxxxxxx..............xxxxxxxxxx...........xxxxxxxxx se o teu último 'x', teu último bloco ocupado é, digamos, o bloco 10000 , e nessa tablespace vc tem blocos de 8KB, vc só poderá fazer shrink para 10000 * 8192 = 81920000 , ou seja, cerca de 81 mB, INDEPENDENTE DE quantos mB em dados vc tem nesse datafile, okdoc ??? É basicamente o cálculo que o Autor faz no script mostrado em http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:153612348067 - tem uns detalhezitos a mais conceituais, mas a Idéia é essa.... Muito bem : antes de falar sobre o que vc pode fazer, há duas coisas que eu desejo deixar ESCRUPULOSAMENTE CLARAS : a) uma situação do tipo ABSOLUTAMENTE, COMPLETAMENTE, TOTALMENTE NÃO INTERFERE NA PERFORMANCE para recuperação normal dos dados, ok ?? Repito, *** Não Interfere *** !! A razão é porque o RDBMS Oracle NUNCA, em TEMPO ALGUM, vai varrer o datafile do início ao fim para buscar um dado, ele é um POUQUINHO mais esperto que isso : se o dado está no bloco, sei lá, 9000, se o acesso é via índice ela faz uma conta tipo 9000 * tamanho do bloco e faz um FSEEK (ele "pula" a 'cabeça de leitura' do disco para esse ponto) e lê esse bloco que precisa, ou se o acesso é via full table scan ele localiza na DBA_EXTENTS o bloco inicial do extent aonde reside o bloco 9000 e faz um FSEEK lendo a qtdade de blocos no extent.... Já que esse cenário NÂO INTERFERE em performance, eu REALMENTE hesito em chamar isso de "FRAGMENTAÇÃO", propriamente dita... b) antes de vc fazer qualquer coisa, TENHA EM MENTE que esse espaço residente em extents vazios VAI SER ** naturalmente e automaticamente ** Ocupado pelos próximos INSERTs/UPDATEs que ocorrerem nos índices (via DML nas tabelas indexadas), ou nas tabelas mesmo que usem essa tablespace/datafile (com a exceção de eventuais INSERTs em append-mode) : sendo assim, PLZ VERIFIQUE se REALMENTE não vai haver daqui a pouco tempo INSERTs/UPDATEs que possam ocupar esse espaço, antes de vc sair fazendo shrink/remove/whatever nesse datafile.... Senão, vc fica naquela situação do cachorro correndo atrás do próprio rabo , ie : com algum esforço vc libera o espaço no datafile via shrink/move/rebuild do datafile, aí amanhã o depois os INSERTs/UPDATEs na(sa) tabela(s) que usam essa tablespace vêm, aí toca vc a CRESCER de novo o datafile, sendo portanto um trabalho SIMPLESMENTE PERDIDO, INÚTIL e ASNINO tudo que vc fez antes, sim ????? ===>>> Então : SE realmente não é Performance a sua Preocupação, E REALMENTE vc tem razoável certeza que Não Mais ocorrerão INSERTs/UPDATEs nas tabelas que usam e tablespace, aí SIM vc pode proceder com alguma coisa para mudar a alocação e permitir o shrink nesse datafile : na versão 9ir2 que é a sua, iirc não existe a possibilidade de COALESCE ou similares na tablespace (CONFIRA na doc, mas iirc é isso) , então é mesmo MOVER para outra tablespace os índices (via REBUILD), já que vc diz que só tem índice.... Eu Não Lembro de cabeça se na 9ir2 ele já deixava vc fazer o ALTER INDEX nnn TABLESPACE novatablespace REBUILD em modo ONLINE ou se vc terá que fazer isso na OFFLINE, na próxima janela de manutenção que vc tiver : cheque aí... []s Chiappa --- Em oracle_br@yahoogrupos.com.br, "Ednilson Silva" <ednilson.silva@...> escreveu > > Chiappa, > > > > Seria ai mesmo que estou querendo chegar. > > > > No primeiro SELECT trouxe 240 linhas, é tudo INDEX que tenho nesta > tablespace (ABMX). > > Segue o resultado do segundo SELECT. > > > > SQL> SELECT FILE_ID, BLOCK_ID, BYTES, BLOCKS FROM DBA_FREE_SPACE WHERE > TABLESPACE_NAME='ABMX' ORDER BY FILE_ID,BLOCK_ID; > > FILE_ID BLOCK_ID BYTES BLOCKS > > ---------- ---------- ---------- ---------- > > 11 1377 98304 12 > > 11 1407 7348224 897 > > 11 2311 999424 122 > > > > Estou pensando desfragmentar essa tablespace. > > > > Grato, > > > > Ednilson Silva > > > > De: oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] Em > nome de J. Laurindo Chiappa > Enviada em: segunda-feira, 25 de fevereiro de 2013 16:25 > Para: oracle_br@yahoogrupos.com.br > Assunto: Re: RES: [oracle_br] ORA-03297: file contains used data beyond > requested RESIZE value > > > > > > Colega,pmfji mas o seu cenário parece mesmo ser EXATAMENTE o que eu disse, > extent(s) alocados depois de outros em branco impedindo o resize... Essa > consulta na DBA_DATA_FILE nos mostra o tamanho do arquivo, OK, cool, mas o > que precisamos saber é ** INTERNAMENTE ** como esse cara tá sendo usado, PLZ > como eu disse consulte a DBA_EXTENTS, pode ser algo + ou - : > > SELECT OWNER, SEGMENT_TYPE, SEGMENT_NAME, PARTITION_NAME, FILE_ID, > EXTENT_ID, BLOCK_ID, BYTES, BLOCKS > FROM DBA_EXTENTS WHERE TABLESPACE_NAME='NOMEDATABLESPACEEMQUESTÂO' ORDER BY > FILE_ID, EXTENT_ID, BLOCK_ID; > > E complementando com um : > > SELECT FILE_ID, BLOCK_ID, BYTES, BLOCKS FROM DBA_FREE_SPACE WHERE > TABLESPACE_NAME='NOMEDATABLESPACEEMQUESTÂO' ORDER BY FILE_ID, EXTENT_ID, > BLOCK_ID; > > aí vc comprova a minha Suposição... > > []s > > Chiappa > > --- Em oracle_br@yahoogrupos.com.br <mailto:oracle_br%40yahoogrupos.com.br> > , "Ednilson Silva" escreveu > > > > Milton, > > Voce tem razão, desculpem minha desatenção. > > > > SQL> select FILE_NAME,FILE_ID,TABLESPACE_NAME,BYTES from DBA_DATA_FILES > > where TABLESPACE_NAME = 'ABMX'; > > > > FILE_NAME FILE_ID TABLESPACE_NAME > > BYTES > > ------------------------------- ---------- ------------------------------ > > ---------- > > /d12/oradata/app/abmx01.dbf 11 ABMX > > 19922944 > > > > Grato, > > > > Ednilson Silva > > > > > > > > -----Mensagem original----- > > De: oracle_br@yahoogrupos.com.br <mailto:oracle_br%40yahoogrupos.com.br> > [mailto:oracle_br@yahoogrupos.com.br <mailto:oracle_br%40yahoogrupos.com.br> > ] Em > > nome de Milton Bastos Henriquis Jr. > > Enviada em: segunda-feira, 25 de fevereiro de 2013 15:36 > > Para: oracle_br@yahoogrupos.com.br <mailto:oracle_br%40yahoogrupos.com.br> > > > Assunto: Re: [oracle_br] ORA-03297: file contains used data beyond > requested > > RESIZE value > > > > Vc está tentando deixar um datafile com 18 MB, sendo que este arquivo já > tem > > mais do que isso de dados atualmente... não tem muito segredo, não dá pra > > fazer milagre! > > > > > > > > > > On Mon, Feb 25, 2013 at 3:28 PM, Ednilson Silva > > wrote: > > > > > ** > > > > > > > > > Pessoal, > > > > > > Estou tentando fazer um resize em alguns datafile, mas esta aparecendo > > > o erro ORA03297 > > > > > > SQL> alter database datafile '/d12/oradata/app/abmx01.dbf' resize 18m; > > > > > > alter database datafile '/d12/oradata/app/abmx01.dbf' resize 18m > > > > > > ORA-03297: file contains used data beyond requested RESIZE value > > > > > > Oracle Database 9i Release 9.2.0.5 > > > > > > HP-UX B.11.31 U ia64 > > > > > > Alguém poderia dar uma ajuda? > > > > > > Grato, > > > > > > Ednilson Silva > > > > > > [As partes desta mensagem que não continham texto foram removidas] > > > > > > > > > > > > > > > [As partes desta mensagem que não continham texto foram removidas] > > > > > > > > ------------------------------------ > > > > ---------------------------------------------------------- > > ---------------------------------------------- > > >Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de > inteira > > responsabilidade de seus remetentes. > > Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ > > ---------------------------------------------------------- > > ---------------------------------------------- > > >Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » > > >Procedure » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO > > >ESPAÇO! VISITE: http://www.oraclebr.com.br/ > > ---------------------------------------------------------- > > -------------------------------------------- Links do Yahoo! Grupos > > > > > > > > [As partes desta mensagem que não continham texto foram removidas] >