unused.sql

----------------------------------
-- SCRIPT  unused.sql
-- INICO DO SCRIPT 
-- ALEXANDRE PIRES 14/05/2012
----------------------------------
--    Data       |   Versao  |   Analista  |   Alteracoes
--------------------------------------------------------------------------------------------------------------
--  01/mar/2004  |    1.0    |   LFCerri   | Espaco realmente ocupado pelos segmentos cujo livre acima da HWM
--               |           |             | seja superior a 50% do total do tamanho do segmento.

define P_OWNER = &OWNER

set linesize 130
set verify off
set serveroutput on size 1000000

DECLARE

   CORTE                     number := 50; -- somente segmentos acima de CORTE% de espaco livre serao listados


   SEGTO_OWNER               varchar2(100);
   PCT_FREE_SGTO             number(5,2);
   TAM_SGTO                  number(20,2);
   TOTAL_BLOCKS              number;
   TOTAL_BYTES               number;
   UNUSED_BLOCKS             number;
   UNUSED_BYTES              number(20,2);
   LAST_USED_EXTENT_FILE_ID  number;
   LAST_USED_EXTENT_BLOCK_ID number;
   LAST_USED_BLOCK           number;

   cursor c_segments(v_owner in varchar2) is
          select segment_name, partition_name, segment_type, bytes
          from dba_segments
          where owner=v_owner
            and segment_type in ('INDEX','TABLE','TABLE PARTITION','INDEX PARTITION')
          order by bytes desc;

    r_segment c_segments%rowtype;

BEGIN
    SEGTO_OWNER := upper('&P_OWNER');

    -- cabecalho
    dbms_output.put_line(rpad('SEGMENT NAME',30)||' - '
                            ||rpad('PARTITION NAME',20)||' - '
                            ||rpad('SEGMENT TYPE',18)||' - '
                            ||lpad('TAM MB',10)||'    - '
                            ||lpad('UNUSED MB',10)||'    - '
                            ||'%UNUSED' );
    dbms_output.put_line('================================================================================================================================');
    -- fim cabecalho

    FOR r_segment IN c_segments(segto_owner) LOOP
         dbms_space.unused_space(segto_OWNER,r_segment.segment_name,r_segment.segment_type,
            TOTAL_BLOCKS, TOTAL_BYTES, UNUSED_BLOCKS, UNUSED_BYTES,
            LAST_USED_EXTENT_FILE_ID, LAST_USED_EXTENT_BLOCK_ID,
            LAST_USED_BLOCK, r_segment.partition_name);

         if ((UNUSED_BYTES/r_segment.bytes) * 100) >= CORTE and unused_bytes > 100*1024
            then
               dbms_output.put_line(rpad(r_segment.segment_name,30)||' - '
                                  ||rpad(nvl(r_segment.partition_name,' '),20)||' - '
                                  ||rpad(r_segment.segment_type,18)||' - '
                                  ||lpad(round(r_segment.bytes/1024/1024,2),10)||' MB - '
                                  ||lpad(round(UNUSED_BYTES/1024/1024,2),10)||' MB - '
                                  ||lpad(round((UNUSED_BYTES/r_segment.bytes) * 100,6),2)||' %'
                );
         end if;
    END LOOP;
    commit;
END;
/

set verify on
----------------------------------
-- FIM DO SCRIPT  -- 
Anúncios

Sobre Alexandre Pires

ORACLE OCS Goldengate Specialist, OCE RAC 10g R2, OCP 12C, 11g, 10g , 9i e 8i - Mais de 25 anos de experiência na área de TI. Participei de projetos na G&P alocado na TOK STOK, EDINFOR alocado na TV CIDADE "NET", 3CON Alocado no PÃO DE AÇUCAR, DISCOVER alocado na VIVO, BANCO IBI e TIVIT, SPC BRASIL, UOLDIVEO alocado no CARREFOUR e atualmente na ORACLE ACS atendendo os seguintes projetos: VIVO, CLARO, TIM, CIELO, CAIXA SEGUROS, MAPFRE, PORTO SEGURO, SULAMERICA, BRADESCO SEGUROS, BANCO BRADESCO, BASA, SANTANDER, CNJ, TSE, ELETROPAULO, EDP, SKY, NATURA, ODEBRESHT, NISSEI, SICREDI, CELEPAR, TAM, TIVIT, IBM, SMILES, CELEPAR, SERPRO,OKI,BANCO PAN, etc
Esse post foi publicado em ORACLE 11gR2, PLSQL SCRIPTS e marcado , , , . Guardar link permanente.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s