Boa Tarde,

Se bem entendi você está querendo redimencionar os datafiles dessa tablespace 
TBS_TABWM_ALL, correto?
Sendo assim como ajuda para saber até onde você pode redimencionar você pode 
executar a procedure abaixo:
Com base nos resultados você pode fazer o redimencionamento.

set serveroutput on

execute dbms_output.enable(2000000);




declare

  cursor c_dbfile is

        select  tablespace_name

                ,file_name

                ,file_id

                ,bytes

        from    sys.dba_data_files

        where   status !='INVALID'

        order   by tablespace_name,file_id;

 

  cursor c_space(v_file_id in number) is

        select block_id,blocks

        from   sys.dba_free_space

        where  file_id=v_file_id

        order  by block_id desc;

 

blocksize       binary_integer;

filesize        binary_integer;

extsize         binary_integer;

 

begin

  select value 

  into   blocksize

  from   v$parameter 

  where  name = 'db_block_size';

  for c_rec1 in c_dbfile

  loop

    filesize := c_rec1.bytes;

    <<outer>>

    for c_rec2 in c_space(c_rec1.file_id)

    loop

      extsize := ((c_rec2.block_id - 1)*blocksize + c_rec2.blocks*blocksize);

      if extsize = filesize

      then

        filesize := (c_rec2.block_id - 1)*blocksize;

      else

        exit outer;

      end if;

    end loop outer;

    if filesize = c_rec1.bytes

    then

      dbms_output.put_line('Tablespace: '

      ||' '||c_rec1.tablespace_name||' Datafile: '||c_rec1.file_name);

      dbms_output.put_line('Nao pode ser redimensionado.')

;

      dbms_output.put_line('.');

    else

      if filesize < 2*blocksize

      then

        dbms_output.put_line('Tablespace: '

        ||' '||c_rec1.tablespace_name||' Datafile: '||c_rec1.file_name);

        dbms_output.put_line('Pode ser redimensionado até: '||2*blocksize

        ||' Bytes, Actual size: '||c_rec1.bytes||' Bytes');

        dbms_output.put_line('.');

      else

        dbms_output.put_line('Tablespace: '

        ||' '||c_rec1.tablespace_name||' Datafile: '||c_rec1.file_name);

        dbms_output.put_line('Pode ser redimensionado até: '||filesize

        ||' Bytes, Actual size: '||c_rec1.bytes);

        dbms_output.put_line('.');

      end if;

    end if;

  end loop;

end;

/



Exemplo de Retorno:
Tablespace:  USERS Datafile: C:\ORACLE\ORADATA\USERS.DBF

Pode ser redimensionado até: 22085632 Bytes, Actual size: 104857600



  ----- Original Message ----- 
  From: rui_madaleno 
  To: [email protected] 
  Sent: Tuesday, September 25, 2007 10:37 AM
  Subject: [oracle_br] Apagar dados de tabela enorme


  Boa Tarde a todos,

  na minha base de dados tenho uma tabela de log que cresceu ate aos
  20GB, contem dados desde 2005. O script de criacao da tabela é:

  CREATE TABLE WORKMG.PP_TRANSFAUX
  (
  NID_TRANSF NUMBER(28) NOT NULL,
  VTRANSFTYPE VARCHAR2(200 BYTE) NOT NULL,
  VTRANSF VARCHAR2(4000 BYTE) NOT NULL,
  DTRANSFDATE DATE NOT NULL
  )
  TABLESPACE TBS_TABWM_ALL

  Quero apagar os dados dos anos de 2005 e 2006, qual a melhor (e mais
  rapida) forma de o fazer ? estou a pensar em fazer algo do tipo:

  alter table workmg.pp_transfaux nologging

  delete from workmg.pp_transfaux where dtransfdata < to_date('20070101
  00:00','yyyymmdd hh24:mi')

  depois de apagar os dados quais as accoes aconselhadas ? vou ficar com
  um tablespace com um "buraco" de 20GB :(

  O meu ambiente:
  Oracle 9.2.0.1 sobre windows 2000

  Cumprimentos

  Rui Madaleno



   

[As partes desta mensagem que não continham texto foram removidas]

Responder a