select sysdate from dual;
col MB_Asignados format 999g999
col MB_Libres format 999g999d9
col MB_Ocupados format 999g999d9
col Ocupacion_x100 format 99d9
col TableSpace format A15
break on Report
compute sum LABEL TOTALES OF MB_Asignados MB_Libres MB_Ocupados on Report;
select
a.tablespace_name TableSpace,
a.Totalasig/1024/1024 MB_Asignados,
b.Libre/1024/1024 MB_Libres,
(a.Totalasig - b.Libre)/1024/1024 MB_Ocupados,
((a.Totalasig - b.Libre) * 100)/a.Totalasig Ocupacion_x100
from
(select tablespace_name, sum(bytes) Totalasig
from dba_data_files
group by tablespace_name) a,
(select tablespace_name , sum(bytes) Libre, max(bytes) Mayor_blk
from dba_free_space
group by tablespace_name) b
where a.tablespace_name = b.tablespace_name;
Como veis este pequeños script lo que hace es hacer una consulta de la dba_datafiles y compararla con la dba_free_space obteniendo así los valores que nos interesan, un ejemplo de la ejecución del script sería este:
TABLESPACE MB_ASIGNADOS MB_LIBRES MB_OCUPADOS OCUPACION_X100
--------------- ------------ ---------- ----------- --------------
SYSTEM 510 303.9 206.1 40.4
TS_PRUEBA 2,000 596.1 1,403.9 70.2
PROBANDO1 3,071 3,010.1 60.9 2.0
PROBANDO2 4,000 3,792.8 207.3 5.2
PROBANDO3 3,000 2,631.3 368.7 12.3
PROBANDO4 1,000 907.2 92.8 9.3
PROBANDO5 2,047 1,768.7 278.3 13.6
TS_UNDO 510 479.7 30.3 5.9
------------ ---------- -----------
TOTALES 16,138 13,489.7 2,648.3
Este script nos puede venir muy bien para crear a su vez otro script que nos mande por correo las alertas de ocupación en nuestras BD Oracle o también para tener un pequeño log del resumen de ocupación de nuestras Bases de Datos.
Un saludo