[SCRIPT] – Trovare Frammentazione nelle Tablespace

Con la seguente query riusciremo a trovare le informazioni per analizare la frammentazione nelle Tablespace:

Clear Columns Computes Breaks
Col Tablespace          format a18
Col DFile               format '99'
Col MB_Totale         format '999,999,999,999'
Col MB_Liberi        format '999,999,999,999'
Col PCT_LIBERO            format  '900.99'
Col Max_MB           format '999,999,999,999,999'
Col Min_MB           format '999,999,999,999,999'
Col Framnti             format '999,999'
set linesize 200
set pagesize 60
compute sum of MB_totale      on report
compute sum of MB_Liberi     on report
compute sum of Framnti          on report
break on report
select  TABLESPACE,                             /* Nome della Tablespace */
        count(*)                QT_DFile,          /* Numero di Datafiles della Tablespace */
        sum(BYTES_TOTALE)/1048576        MB_totale,    /* Dimensione totale della Tablespace */
        sum(BYTES_LIBERI)/1048576       MB_liberi,   /* Spazio libero Totale della Tablespace */
  (sum(BYTES_LIBERI)*100)/sum(BYTES_TOTALE)    PCT_LIBERO,       /*Percentuale spazio libero della Tablespace*/ 
  max(max_bytes)/1048576          Max_MB,      /* Segmento contíguo più grande della Tablespace */
        min(to_number(decode(min_bytes,0,null,
        min_bytes)))/1048576            Min_MB,      /* Segmento contiguo più piccolo della Tablespace */
        sum(Frammenti)         Framnti         /* Quantità di frammenti della Tablespace */
from    (Select  substr(a1.FILE_NAME,(instr(a1.file_name,'data/',5,1)+5),20) DataFile,
                        a1.FILE_ID,
                        a1.TABLESPACE_NAME              TableSpace,
                        a1.BYTES                       Bytes_Totale,
                        sum(a2.bytes)                  Bytes_Liberi,
                        max(a2.bytes)                   Max_Bytes,
                        min(a2.bytes)                   Min_Bytes,
                        count(*)                        Frammenti,
                        a1.STATUS,
                        a1.File_Name
                from dba_data_files a1, dba_free_space a2
                where  a1.file_id = a2.file_id
                group by a1.file_id,a1.tablespace_name,a1.bytes,a1.status,a1.file_name
                union
                Select  substr(a1.FILE_NAME,(instr(a1.file_name,'data/',5,1)+5),20) DataFile,
                        a1.FILE_ID,
                        a1.TABLESPACE_NAME              TableSpace,
                        a1.BYTES                        Bytes_Totale,
                        0                               Bytes_Liberi,
                        0                               Max_Bytes,
                        0                               Min_Bytes,
                        0                               Frammenti,
                        a1.STATUS,
                        a1.File_Name
                from dba_data_files a1
                where a1.file_id not in (select distinct file_id from dba_free_space)
        union
        Select  substr(a1.FILE_NAME,(instr(a1.file_name,'data/',5,1)+5),20) DataFile,
                        a1.FILE_ID,
                        a1.TABLESPACE_NAME              TableSpace,
                        a1.BYTES                        Bytes_Totale,
                        sum(a2.bytes)                   Bytes_Liberi,
                        max(a2.bytes)                   Max_Bytes,
                        min(a2.bytes)                   Min_Bytes,
                        count(*)                        Frammenti,
                        a1.STATUS,
                        a1.File_Name
                from dba_temp_files a1, dba_free_space a2
                where  a1.file_id = a2.file_id
                group by a1.file_id,a1.tablespace_name,a1.bytes,a1.status,a1.file_name
                union
                Select  substr(a1.FILE_NAME,(instr(a1.file_name,'data/',5,1)+5),20) DataFile,
                        a1.FILE_ID,
                        a1.TABLESPACE_NAME              TableSpace,
                        a1.BYTES                        Bytes_Totale,
                        0                               Bytes_Liberi,
                        0                               Max_Bytes,
                        0                               Min_Bytes,
                        0                               Frammenti,
                        a1.STATUS,
                        a1.File_Name
                from dba_temp_files a1
                where a1.file_id not in (select distinct file_id from dba_free_space)
                )
group by tablespace
order by pct_libero;

Esempio di risultato:

Chi Sono

Bruno Bragatto è laureato in Automazione Industriale nell’IFSP (San Paolo – Brasile), con specializzazione in Database nella FIAP (San Paolo – Brasile) e è certificato Oracle Database 11g Administrator Certified Associate e Microsoft MCSA – SQL 2016 Database Administration.

OCA - Oracle 11g Database Administrator