Pular para o conteúdo

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

#105506
Fábio Prado
Participante

    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( blocks
    t.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