Colega, no bd Oracle vc ABSOLUTAMENTE NÃO TEM controle de qual 
informação vai ser armazenada em qual datafile, ok ?? Logicamente 
falando, a granularidade de controle do armazenamento vai só até a 
tablespace, dentro da tablespace quando um dado é inserido ou 
alterado, QUALQUER extent livre vai ser usado, em princípio... Em 
muitos casos o bd segue a ordem em que os arquivos foram criados, MAS 
nem isso é garantido.
  No caso em questão, porém, isso NÃO é relevante, pois para liberar 
espaço que vc não quer mais deixar alocado bastaria vc fazer um 
shrink do(s) datafile(s) em questão (comando ALTER DATABASE 
DATAFILE 'patchcompleto/nomecompletododatafile' RESIZE nnn; onde nnn 
é o menor tamanho possível, logo acima do último extent alocado. 
Assim, se hoje vc tem usado digamos 543 Mb no datafile, ele está 
criado com mais espaço que isso, E vc não quer mais deixar esse 
espaço extra alocado (pois sabe que não haverá proximamente mais 
inserts que precisarão do espaço), vc poderia pedir um RESIZE para 
543 Mb, aí o espaço que está em uso no datafile continua, MAS o 
espaço livre é liberado, é isso.... Vc não tem como, mas no caso em 
questão  ** NÃO PRECISA ** remover, "passar dados", alterar 
fisicamente enfim os datafiles afora o resize pra isso. Um script que 
pode te ajudar, servir de base pro seu pra encontrar o menor tamanho 
possível pra se resizear poderia ser :
  
----------- maxshrink.sql ----------------------------------
REM
REM este script foi criado por Tom Kyte. Serve para checar o
REM MÍNIMO tamanho usado nos datafiles.
REM
accept v_tablespaces CHAR prompt 'Tablespace(s) a Incluir, já contém %
%, [ENTER] = todas:'
set verify off
column file_name format a50 word_wrapped
column smallest format 999,990 heading "Smallest|Size|Poss."
column currsize format 999,990 heading "Current|Size"
column savings  format 999,990 heading "Poss.|Savings"
break on report
compute sum of savings on report

column value new_val blksize NOPRINT

select value from v$parameter where name = 'db_block_size'
/

select  tablespace_name, file_name,
       ceil( (nvl(hwm,1)*&&blksize)/1024/1024 ) smallest,
       ceil( blocks*&&blksize/1024/1024) currsize,
       ceil( blocks*&&blksize/1024/1024) -
       ceil( (nvl(hwm,1)*&&blksize)/1024/1024 ) savings
from dba_data_files a,
     ( select  file_id, max(block_id+blocks-1) hwm
         from dba_extents
        group by file_id ) b
where a.file_id = b.file_id(+)
  and a.tablespace_name like upper('%&v_tablespaces%')
 order by 1,2
/

column cmd format a200 word_wrapped

select   'alter database datafile '''||file_name||''' resize ' ||
       ceil( (nvl(hwm,1)*&&blksize)/1024/1024 )  || 'm;' cmd
from dba_data_files a,
     ( select  file_id, max(block_id+blocks-1) hwm
         from dba_extents
        group by file_id ) b
where a.file_id = b.file_id(+)
  and a.tablespace_name like upper('%&v_tablespaces%')
  and ceil( blocks*&&blksize/1024/1024) -
      ceil( (nvl(hwm,1)*&&blksize)/1024/1024 ) > 0
 order by a.tablespace_name, a.file_name
/



==> OBS : pode haver casos onde o datafile tem extent(s) acima do 
extent livre, nesses casos vc só poderá fazer o RESIZE pra um valor 
acima do último extent efetivamente usado, os eventuais extents free 
abaixo disso vc só recuperaria movendo o segmento.

[]s

  Chiappa

--- Em oracle_br@yahoogrupos.com.br, "Everton Dias" 
<[EMAIL PROTECTED]> escreveu
>
> 
> Pessoal, tenho a seguinte configuração em uma tbs de indices.
> Como podem notar tenho 3 datafiles, contendo 1.5 GB, 1.9 GB e 150 
MB, porém 
> se somar os dados dos 3 ocuparia 1 GB.
> 
> Como posso passar os dados para apenas 1 datafile e remover os 
demais ?
> 
> Obrigado.
> 
> 
> 
>   total MB    Free MB Datafile 
name                                         
> Used MB   total KB    Free KB    Used KB
> ---------- ---------- ----------------------------------------------
---- 
> ---------- ---------- -----
>       1500     
956.13 /u02/app/oracle/oradata/ovdb/cindx01.dbf               
> 543.88    1536000     979072
>       1900    
1383.94 /u02/app/oracle/oradata/ovdb/cindx021.dbf              
> 516.06    1945600    1417152
>        150          
0 /u02/app/oracle/oradata/ovdb/cindx03.dbf               
>       0     153600          0          0
> 
> _________________________________________________________________
> MSN Busca: fácil, rápido, direto ao ponto.  http://search.msn.com.br
>


Responder a