Como excluir dados e liberar espaço em disco no Oracle DBMS 9i

3

Eu gostaria de saber como normalmente um excluiria dados de um DBMS Oracle 9i que realmente libera espaço em disco. No cenário passado, tivemos casos em que limpar de 1 a 2 milhões de linhas de dados não se traduz em um decréscimo no uso do espaço em disco.

Cenário:

sqlplus > delete from audit_log where date_created between today and the day before;

sqlplus > 2 million records deleted.

bash$: du -sh (after issuing the delete above)

Resulta em nenhuma alteração no uso do espaço em disco.

O que também me leva à questão, será necessário descarregar mais tabelas para que o oracle apague completamente todos os dados supostamente excluídos pelo delete DML

    
por Oh Chin Boon 29.04.2011 / 04:32

4 respostas

6

No Oracle, a exclusão de linhas de uma tabela não libera automaticamente nenhum espaço em disco. É possível liberar espaço em disco, mas para conseguir isso você precisa descobrir como as tabelas são colocadas fisicamente nos arquivos de dados. Assim que um arquivo de dados tiver blocos vazios no final, você poderá redimensionar o arquivo de dados para um tamanho menor. Somente após essa operação bem-sucedida, você recupera o espaço em disco real. Se você tiver muitos blocos vazios em um arquivo de dados, mas não no final, pode ser mais fácil mover as tabelas do espaço de tabela ao qual o arquivo de dados pertence em um novo espaço de tabela e descartar o espaço de tabela antigo. Isso não funcionará para o espaço de tabela SYSTEM, você não tem permissão para mover objetos SYS para um outro espaço de tabela.

Às vezes você tem sorte quando pode mover apenas uma pequena tabela que bloqueou a liberação de espaço porque foi colocada no final de um arquivo de dados. Nesse caso, um simples alter table thesmalltable move; realocará essa tabela e criará espaço recuperável no final do arquivo de dados [s]. Depois disso, alter database datafile '/your/df/name.dbf' resize the_new_size; libera espaço em disco.

Uma tabela é logicamente colocada em um tablespace. Um tablespace consiste em um mínimo de 1 arquivo de dados, em muitos casos múltiplos arquivos de dados.

    
por 29.04.2011 / 08:12
1

Para completar outras respostas, purging diag logs pode ajudá-lo a liberar algum espaço em disco significativo (até vários GBs).

Verifique isso: link

Basicamente, você executará o utilitário de linha de comando adrci do Oracle, em seguida, faça:

adrci> set homepath diag/rdbms/yourinstance/yourinstance
adrci> purge -age 10080

O exemplo acima removerá os traços do diagnóstico com mais de uma semana.

Além disso, verifique se você tem espaços de tabela gerenciados localmente (LMT) ou diretórios gerenciados de diretório (DMT). O primeiro deve lidar melhor com a fragmentação (embora esteja longe de ser perfeito). Verifique: link

    
por 02.01.2013 / 14:57
0

Tente este comando para recuperar algum espaço:

DUMP TRAN <database name> WITH NO_LOG

Acho que a melhor maneira de recuperar o espaço no disco rígido é remover qualquer outro arquivo não usado do disco rígido.

A maneira usual de excluir dados do banco de dados é executar o comando delete, mas isso não necessariamente libera espaço em disco.

    
por 29.04.2011 / 04:44
0
EPADMRT > @resizea

CURRENT_MEG    SAVINGS    ID TABLESPACE_NAME RESIZE_COMMAND
----------- ---------- ----- --------------- ---------------------------------------------------------------------------------------
      30000         -1     3 UNDO_TS         alter database datafile '/var/oradata03/PADMRT/PADMRT_UNDO_01.dbf' resize 30001m;
      30000         -1    19 UNDO_TS         alter database datafile '/var/oradata04/PADMRT/PADMRT_UNDO_02.dbf' resize 30001m;
      20000         -1    11 OPLA_DATA       alter database datafile '/var/oradata01/PADMRT/OPLA_DATA01.dbf' resize 20001m;
      15360         -1     8 AGILEODM_INDX   alter database datafile '/var/oradata01/PADMRT/AGILEODM_INDX_DATA02.dbf' resize 15361m;
      20480         -1    13 AGILEODM        alter database datafile '/var/oradata02/PADMRT/AGILEODM_DATA04.dbf' resize 20481m;
       5120         -1     7 AGILEODM_INDX   alter database datafile '/var/oradata01/PADMRT/AGILEODM_INDX_DATA01.dbf' resize 5121m;
      20480         -1    14 AGILEODM        alter database datafile '/var/oradata02/PADMRT/AGILEODM_DATA05.dbf' resize 20481m;
 32767.1875     -.8125     6 AGILEODM        alter database datafile '/var/oradata01/PADMRT/AGILEODM_DATA01.dbf' resize 32768m;
      13236          0     5 AGILEODI        alter database datafile '/var/oradata01/PADMRT/AGILEODI_DATA01.dbf' resize 13236m;
      22784          6     9 AGILEODI        alter database datafile '/var/oradata02/PADMRT/AGILEODI_DATA02.dbf' resize 22778m;
      32767         30    10 AGILEODM        alter database datafile '/var/oradata02/PADMRT/AGILEODM_DATA02.dbf' resize 32737m;
      10240         42    20 AGILEODI        alter database datafile '/var/oradata01/PADMRT/AGILEODI_DATA03.dbf' resize 10198m;
       3000         51    16 VQA_DATA        alter database datafile '/var/oradata03/PADMRT/VQA_DATA02.dbf' resize 2949m;
       3000         72    15 VQA_DATA        alter database datafile '/var/oradata01/PADMRT/VQA_DATA01.dbf' resize 2928m;
       3000         79    18 VQA_DATA        alter database datafile '/var/oradata04/PADMRT/VQA_DATA04.dbf' resize 2921m;
       1335        151     4 USERS           alter database datafile '/var/oradata01/PADMRT/users01.dbf' resize 1184m;
      10240        202    21 AGILEODI        alter database datafile '/var/oradata01/PADMRT/AGILEODI_DATA04.dbf' resize 10038m;
       6144        938     2 SYSAUX          alter database datafile '/var/oradata02/PADMRT/PLMDM_SYSAUX_DATA1_01.dbf' resize 5206m;
       4096       1058     1 SYSTEM          alter database datafile '/var/oradata02/PADMRT/PLMDM_SYS_DATA1_01.dbf' resize 3038m;
      32767       1391    22 OPLA_DATA       alter database datafile '/var/oradata01/PADMRT/OPLA_DATA02.dbf' resize 31376m;
      10000       7053    17 VQA_DATA        alter database datafile '/var/oradata03/PADMRT/VQA_DATA03.dbf' resize 2947m;
      32767       7492    12 AGILEODM        alter database datafile '/var/oradata02/PADMRT/AGILEODM_DATA03.dbf' resize 25275m;
      32767       8749    23 AGILEODM        alter database datafile '/var/oradata03/PADMRT/AGILEODM_DATA06.dbf' resize 24018m;

O resizea.sql completo segue:

set termout off drop table alan99; set pages 50 set wrap off col resize_command for a180 col id for 9999 create table alan99 as select max(block_id+blocks) block_id,file_id from dba_extents group by file_id; column tablespace_name format a15 column pct format 999.99 set wrap off set lines 320 set trunc off column file_id format 999 set termout on select b.bytes/1024/1024 CURRENT_meg,b.bytes/1024/1024-trunc(c.block_id*8192/1024/1024+1) savings, b.file_id id,b.tablespace_Name,'alter database datafile '''||b.file_name||''' resize ' ||trunc(c.block_id*8192/1024/1024+1)||'m;' resize_command from dba_data_files b, alan99 c where b.file_id=c.file_id order by 2; set termout off drop table alan99; set termout on

    
por 17.10.2014 / 19:37