select total.ts tablespace,
total_t.mb total_mb,
NVL(total.mb - free.mb,total.mb) used_mb,
total_t.mb-(NVL(total.mb - free.mb,total.mb)) free_mb,
DECODE(total_t.mb,NULL,0,NVL(ROUND((total.mb - free.mb)/(total_t.mb)*100,2),100)) pct_used,
CASE WHEN (total_t.mb IS NULL) THEN '['||RPAD(LPAD('OFFLINE',13,'-'),20,'-')||']'
ELSE '['|| DECODE((total_t.mb-(NVL(total.mb - free.mb,total.mb))),
null,'XXXXXXXXXXXXXXXXXXXX',
NVL(RPAD(LPAD('X',trunc((100-ROUND( (total_t.mb-(NVL(total.mb - free.mb,total.mb)))/(total_t.mb) * 100, 2))/5),'X'),20,'-'),
'--------------------'))||']'
END as GRAPH
from
(select tablespace_name ts, sum(bytes)/1024/1024 mb from dba_data_files group by tablespace_name) total,
(select tablespace_name ts, sum(decode(autoextensible,'YES',maxbytes,bytes))/1024/1024 mb from dba_data_files group by tablespace_name) total_t,
(select tablespace_name ts, sum(bytes)/1024/1024 mb from dba_free_space group by tablespace_name) free
where total.ts=free.ts(+) and total_t.ts=total.ts
UNION ALL
SELECT D.tablespace_name,
SPACE total_mb,
used_space used_mb ,
SPACE - used_space as free_mb,
Round(Nvl(used_space, 0) / SPACE * 100, 2) "USED_RATE(%)",
'['||DECODE(SPACE - used_space,0,'XXXXXXXXXXXXXXXXXXXX',
NVL(RPAD(LPAD('X',(TRUNC(Round(Nvl(used_space, 0) / SPACE * 100, 2)/5)),'X'),20,'-'),'--------------------'))||']'
FROM (SELECT tablespace_name,
Round(sum(decode(autoextensible,'YES',maxbytes,bytes)) / ( 1024 * 1024 ), 2) SPACE,
SUM(blocks) BLOCKS
FROM dba_temp_files
GROUP BY tablespace_name) D,
(SELECT tablespace,
Round(SUM(blocks * 8192) / ( 1024 * 1024 ), 2) USED_SPACE
FROM v$sort_usage
GROUP BY tablespace) F
WHERE D.tablespace_name = F.tablespace(+)
order by 5 Desc;