Based on Oracle 10g/11g
-- show summary permanent tablespace usage
SELECT t.tablespace_name
,t.total_perm_mb
,u.used_perm_mb
, (t.total_perm_mb - u.used_perm_mb) free_perm_mb
,ROUND ((t.total_perm_mb - u.used_perm_mb) / t.total_perm_mb * 100, 2)
free_percent
FROM (SELECT df.tablespace_name
, SUM (DECODE (df.autoextensible
,'YES', df.maxbytes
,'NO', BYTES
)
)
/ 1024
/ 1024 total_perm_mb
FROM dba_data_files df, dba_tablespaces dt
WHERE df.tablespace_name = dt.tablespace_name
AND dt.CONTENTS = 'PERMANENT'
GROUP BY df.tablespace_name) t
, (SELECT ds.tablespace_name
, SUM (ds.BYTES) / 1024 / 1024 used_perm_mb
FROM dba_segments ds
GROUP BY ds.tablespace_name) u
WHERE t.tablespace_name = u.tablespace_name
ORDER BY 5 ASC