查看数据库的大小
select sum(bytes)/1024/1024/1024 from v$datafile;
--查看表空间的名称及大小
select t.tablespace_name, round(sum(d.bytes / (1024 * 1024)), 0) ts_size
from dba_tablespaces t, dba_data_files d
where t.tablespace_name = d.tablespace_name
group by t.tablespace_name;
 
--查看表空间物理文件的名称及大小
select tablespace_name, file_id, file_name, round(bytes / (1024 * 1024), 0) total_space
from dba_data_files
orderby tablespace_name;
 
--表空间的未用空间
select tablespace_name, sum(bytes) / (1024 * 1024) mbytes
from dba_free_space
groupby tablespace_name;
 
--数据库的大小,和空间使用情况
select a.tablespace_name, a.bytes total, b.bytes used, c.bytes free,
  (b.bytes * 100) / a.bytes "used %", (c.bytes * 100) / a.bytes "free %"
fromsys.sm$ts_avail a, sys.sm$ts_used b, sys.sm$ts_free c
where a.tablespace_name = b.tablespace_name and a.tablespace_name = c.tablespace_name
 
select d.file_id "文件号",
       d.tablespace_name "表空间名",
       d.file_name "数据文件全路径",
       d.bytes / 1024 / 1024 "当前容量/M",
       round(d.maxbytes / 1024 / 1024 ) "最大容量/M",
       round(d.maxbytes / 1024 / 1024 - d.bytes / 1024 / 1024 ) "空闲容量/M",
       d.autoextensible "是否自动增长",
       d.status "当前状态"
from dba_data_files d
order by 2, regexp_substr(d.file_name, '[^/]+', 1, length(regexp_replace(d.tablespace_name, '[^/]+')));


--表空间的文件使用情况
select b.file_id 文件id, 
       b.tablespace_name 表空间, 
	   b.file_name 物理文件名,
       b.bytes 总字节数, (b.bytes - sum(nvl(a.bytes, 0))) 已使用, 
       sum(nvl(a.bytes, 0)) 剩余,
	   sum(nvl(a.bytes, 0)) / (b.bytes) * 100剩余百分比
from dba_free_space a, dba_data_files b   
where a.file_id = b.file_id   
groupby b.tablespace_name, b.file_name, b.file_id, b.bytes   
orderby b.tablespace_name;

select b.file_id fil_id, 
       b.tablespace_name tbs_name, 
       b.file_name fil_name,
       b.bytes/1024/1024 "bytes/M", 
       (b.bytes - sum(nvl(a.bytes, 0)))/1024/1024 "bytes_used/M", 
       sum(nvl(a.bytes, 0))/1024/1024 "free_used/M",
       sum(nvl(a.bytes, 0)) / (b.bytes) * 100 "free_per/%"
from dba_free_space a, dba_data_files b
where a.file_id = b.file_id
group by b.tablespace_name, b.file_name, b.file_id, b.bytes
order by b.tablespace_name;

--详细查看表空间使用状况,包括总大小,使用空间,使用率,剩余空间
set lines 200
col group_number for 99
col state for a15
col name for a20
col total_gb for 999999.99
col free_gb for 999999.99
col free_percent for 99.99
col care for a5
set linesize 131
set pagesize 200
set termout off
set trimspool on
set serveroutput on
set lines 200 pages 300
col tablespace_name for a30
select u.*,
       round(p.avg_use_per_day_mb,1) avg_used_per_day_mb,
	   round((max_size_mb-size_used_mb)/p.avg_use_per_day_mb) tbs_exhaust_days,
case when u.MAX_FREE_RATE<7 and round((max_size_mb-size_used_mb)/p.avg_use_per_day_mb)<30 then '*' else null end care
from (select a.tablespace_name,
             b.size_used_mb,
			 a.data_size_mb,
             round(100-b.size_used_mb/a.data_size_mb*100) free_rate,
             a.max_size_mb, 
			 a.max_size_mb - b.size_used_mb free_mb,
             round(100-b.size_used_mb/a.max_size_mb*100) max_free_rate
      from
            (select tablespace_name,round(sum(bytes/1024/1024)) data_size_mb,
			        round(sum(case when maxbytes>bytes then maxbytes else bytes end)/1024/1024) max_size_mb
             from dba_data_files group by tablespace_name) a,
                 (select tablespace_name,
				         round(sum(bytes/1024/1024)) size_used_mb
                  from dba_segments group by tablespace_name) b
             where a.tablespace_name=b.tablespace_name order by 6 desc,4 desc) u,
         (select name,
		         avg(use_per_day_mb)+0.0001 avg_use_per_day_mb 
          from (select x.name,
		               x.rdate,
		               (x.used_blocks-lag(x.used_blocks) over (partition by name order by rdate))*y.block_size/1024/1024 use_per_day_mb
                from (select to_char(to_date(rtime,'mm/dd/yyyy hh24:mi:ss'),'yyyy-mm-dd') rdate ,
				             name,
							 max(tablespace_usedsize) used_blocks from dba_hist_tbspc_space_usage a,
							 v$tablespace b
                      where a.tablespace_id=b.ts#
                      group by to_char(to_date(rtime,'mm/dd/yyyy hh24:mi:ss'),'yyyy-mm-dd'),name order by name  ) x, dba_tablespaces y
                where x.name=y.tablespace_name )
                where use_per_day_mb is not null
          group by name) p
where u.TABLESPACE_NAME=p.name
and u.TABLESPACE_NAME not like '%UNDO%'
and u.TABLESPACE_NAME not like '%TEMP%'
order by 4,7;
--详细查看表空间使用状况,包括总大小,使用空间,使用率,剩余空间
set linesize 120;
set pagesize 999;
col TABLESPACE_NAME for a20;
select t.* 
from (SELECT 
        D.TABLESPACE_NAME, 
		SPACE "SUM_SPACE(M)",
        BLOCKS SUM_BLOCKS,
        SPACE - NVL(FREE_SPACE, 0) "USED_SPACE(M)",
        ROUND((1 - NVL(FREE_SPACE, 0) / SPACE) * 100, 2) "USED_RATE(%)",
        FREE_SPACE "FREE_SPACE(M)"
      FROM (SELECT TABLESPACE_NAME,
              ROUND(SUM(BYTES) / (1024 * 1024), 2) SPACE,
              SUM(BLOCKS) BLOCKS
            FROM DBA_DATA_FILES
            GROUP BY TABLESPACE_NAME) D,
           (SELECT TABLESPACE_NAME,
            ROUND(SUM(BYTES) / (1024 * 1024), 2) FREE_SPACE
            FROM DBA_FREE_SPACE
            GROUP BY TABLESPACE_NAME) F
            WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME(+)
UNION ALL --if have tempfile
SELECT 
  D.TABLESPACE_NAME,
  SPACE "SUM_SPACE(M)",
  BLOCKS SUM_BLOCKS,
  USED_SPACE "USED_SPACE(M)",
  ROUND(NVL(USED_SPACE, 0) / SPACE * 100, 2) "USED_RATE(%)",
  SPACE - USED_SPACE "FREE_SPACE(M)"
FROM (SELECT 
        TABLESPACE_NAME,
        ROUND(SUM(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(+)) t
order by "USED_RATE(%)" desc;