select a.TABLESPACE_NAME,

a.BYTES bytes_used,

b.BYTES bytes_free,

b.largest,

round(((a.BYTES-b.BYTES)/a.BYTES)*100,2) percent_used

from

(

select TABLESPACE_NAME,

sum(BYTES) BYTES

from dba_data_files

group by TABLESPACE_NAME

)

a,

(

select TABLESPACE_NAME,

sum(BYTES) BYTES ,

max(BYTES) largest

from dba_free_space

group by TABLESPACE_NAME

)

b

where a.TABLESPACE_NAME=b.TABLESPACE_NAME

order by ((a.BYTES-b.BYTES)/a.BYTES) desc;

Produces something like this:

<td>
  BYTES_USED
</td>

<td>
  BYTES_FREE
</td>

<td>
  LARGEST
</td>

<td>
  PERCENT_USED
</td>
<td>
  &#8212;&#8212;&#8212;-
</td>

<td>
  &#8212;&#8212;&#8212;-
</td>

<td>
  &#8212;&#8212;&#8212;-
</td>

<td>
  &#8212;&#8212;&#8212;&#8212;
</td>
<td>
  241172480
</td>

<td>
  10289152
</td>

<td>
  9371648
</td>

<td>
  95.73
</td>
<td>
  157286400
</td>

<td>
  11206656
</td>

<td>
  7274496
</td>

<td>
  92.88
</td>
<td>
  220200960
</td>

<td>
  22609920
</td>

<td>
  17367040
</td>

<td>
  89.73
</td>
<td>
  104857600
</td>

<td>
  25624576
</td>

<td>
  19398656
</td>

<td>
  75.56
</td>
<td>
  10485760
</td>

<td>
  6750208
</td>

<td>
  3145728
</td>

<td>
  35.63
</td>
<td>
</td>

<td>
</td>

<td>
</td>

<td>
</td>

from http://vsbabu.org/oracle/sect03.html