Eu tenho um tablespace Oracle 12c com o tamanho de 90 GB. Quase 40 GB são gratuitos.
TB1 54 % 90880 41383 49497 46 98304 50 % ONLINE PERMANENT
O tablespace tem 3 arquivos de dados.
E:\ORACLE\ORADATA\xx\TB1.DBF 33554416 True 100
F:\ORACLE\ORADATA\xx\TB1_2.DBF 33554416 True 100
G:\ORACLE\ORADATA\xx\TB1_3.DBF 25344000 True 100
Como posso reduzir o tablespace para recuperar os 40 GB gratuitos (arquivos de dados no disco)? Eu não posso ter um tempo de inatividade.
Concordo com o comentário de EdStevens, mas aqui estão algumas outras ideias:
O site do AskTom tem um script que listará exatamente quanto você pode reduzir os arquivos de dados existentes.
Se isso não gerar muita economia, você poderá encontrar os maiores índices nesse tablespace e reconstruí-los; essa é uma solução temporária e os índices acabariam ficando grandes novamente, mas se o orçamento não permitir mais espaço em disco agora, tente esta consulta:
Então, se você achar que um índice chamado
ind_big_stuff
é enorme, entãoAlém disso, se seu aplicativo for um aplicativo comercial, pode haver várias tabelas com zero linhas. Ou se você tiver tabelas particionadas, poderá ter algumas partições com zero linhas. Você pode soltar o espaço alocado a eles com
Você pode usar a
segment creation deferred
cláusula em uma instrução alter table para coisas como tabelas particionadas ou tabelas que você sabe que não terão nenhuma linha.Eu acho que existem cinco métodos para lidar com esse problema de manutenção do oráculo:
Procurei uma resposta para isso e finalmente encontrei:
PURGE TABLESPACE table_space_name;
ALTER TABLESPACE table_space_name COALESCE;
ALTER DATABASE DATAFILE '/u02/oracle/rbdb1/file1.dbf' RESIZE 100M;
PS: Não tenho certeza sobre o tempo de inatividade, alguém por favor verifique isso.
PPS: Para tablespaces TEMP, use:
ALTER TABLESPACE TEMP SHRINK SPACE ;
(opcionalmente adicionarKEEP 512M
ou similar)ALTER DATABASE TEMPFILE '/u02/oracle/rbdb1/temp01.dbf' RESIZE 512M;
Muito eficaz também é mover tudo para outro novo tablespace online:
Execute o script abaixo, ele liberará espaço não utilizado dos arquivos de dados do respectivo tablespace.
Verifique os detalhes em https://orahow.com/reclaiming-unused-space-in-datafiles/
https://orahow.com/reclaim-unused-space-in-oracle/ Tem 2 abordagens para identificar e recuperar espaço.