› Fóruns › Banco de dados Oracle › Exclui um schema mais não liberou espaço em disco › Exclui um schema mais não liberou espaço em disco
gustvogdv,
Isso não é problema. Vc apagou um usuário e seus objetos, mas o datafile não sofre redimensionamento automático para diminuir e liberar o espaço destes objetos.
Sugiro que vc estude antes o que são tablespaces e sua relação com os datafiles (no blog do Eduardo Legatti que tbém é articulista do GPO vc encontrará bons artigos sobre tablespaces), depois descubra se o seu usuário usava um tablespace só dele, se sim, vc conseguirá fazer um resize executando o script abaixo (conectado com usuário c/ privs. de DBA) que eu utilizo normalmente para redimensionar o(s) datafile(s) do tablespace desejado. Se o tablespace era compartilhado com outros usuários, provavelmente vc não conseguirá reduzir muito o tamanho do(s) datafile(s). O porquê envolve muitos conceitos, que não dá para eu explicar aqui agora…
set serveroutput on
declare
v_txtCmd VARCHAR2(4000);
BEGIN
dbms_output.enable(null);
FOR CUR IN (SELECT FILE_NAME,
ceil( (nvl(hwm,1)t.block_size)/1024/1024 ) smallest,
ceil( blockst.block_size/1024/1024) currsize,
ceil( blockst.block_size/1024/1024) –
ceil( (nvl(hwm,1)t.block_size)/1024/1024 ) savings
FROM DBA_DATA_FILES A
INNER JOIN DBA_TABLESPACES T
on T.TABLESPACE_NAME = a.TABLESPACE_NAME
left join ( select file_id,
max(block_id+blocks-1) hwm
from dba_extents
group by file_id ) b
ON A.FILE_ID = B.FILE_ID
WHERE a.TABLESPACE_NAME=’&TABLESPACE_NAME’
)
LOOP
if cur.savings > 0 then
v_txtCmd:=”;
select 'alter database datafile '''|| cur.file_name||''' resize ' || cur.smallest || 'm'
INTO v_txtCmd
from dual;
execute immediate v_txtCmd;
DBMS_OUTPUT.PUT_LINE(V_TXTCMD);
ELSE
DBMS_OUTPUT.PUT_LINE('Não há espaço para reduzir o datafile ' || cur.file_name || ' acima de HWM');
end if;
END LOOP;
END;
[]s