oracle 查询 表空间使用率 sql
前段时间根据业务需要,就琢磨着监控一下表空间使用状态,对百分比超过80的表空间进行及时的扩容,百度上查询了一些例子sql,自己有改动一下,再次分享给大家:
set lines 200
set pages 40
/** data tablespace **/
select * from (
select a.tablespace_name, round(c.bytes/1024/1024,1) as "Free Size M",a.bytes/1024/1024 as "Size M",
round((a.bytes - c.bytes)/1024/1024,1) as "Used Size M",round(b.bytes/1024/1024 ,1) as "Max Size M",
cast(((a.bytes - c.bytes)/a.bytes )*100 as int ) as "Use %",cast(((a.bytes - c.bytes)/b.bytes )*100 as int ) as "Max Used%"
from
(select tablespace_name ,sum(bytes) as bytes from dba_data_files group by tablespace_name ) a,
(SELECT TABLESPACE_NAME ,SUM(BYTES) as bytes FROM (
select tablespace_name ,sum(bytes) as bytes from dba_data_files where autoextensible=upper('no')
group by tablespace_name
union all
select tablespace_name ,sum(maxbytes) as bytes from dba_data_files where autoextensible=upper('yes')
group by tablespace_name ) GROUP BY TABLESPACE_NAME ) b,
(select tablespace_name,sum(bytes) as bytes from dba_free_space group by tablespace_name ) c
WHERE a.tablespace_name = b.tablespace_name(+)
AND b.tablespace_name = c.tablespace_name(+)
UNION ALL /** temp tablespace **/
select a.tablespace_name, round(c.bytes/1024/1024,1)as "Free Size M",round(a.bytes/1024/1024,1) as "Size M",
round((a.bytes - c.bytes)/1024/1024,1) as "Used Size M" ,round(b.bytes/1024/1024 ,1) as "Max Size M",
cast(((a.bytes - c.bytes)/a.bytes )*100 as int) as "Use %",cast(((a.bytes - c.bytes)/b.bytes )*100 as int ) as "Max Used%"
from
(select tablespace_name ,sum(bytes) as bytes from dba_temp_files group by tablespace_name ) a,
(SELECT TABLESPACE_NAME ,SUM(BYTES) as bytes FROM (
select tablespace_name ,sum(bytes) as bytes from dba_temp_files where autoextensible=upper('no')
group by tablespace_name
union all
select tablespace_name ,sum(maxbytes) as bytes from dba_temp_files where autoextensible=upper('yes')
group by tablespace_name ) GROUP BY TABLESPACE_NAME ) b,
(select tablespace_name,sum(free_space) as bytes from dba_temp_free_space group by tablespace_name ) c
WHERE a.tablespace_name = b.tablespace_name(+)
AND b.tablespace_name = c.tablespace_name(+)
) order by 7 desc
执行结果输出参考(测试机)
SQL> set lines 200
SQL> set pages 40
SQL> /** data tablespace **/
SQL> select * from (
2 select a.tablespace_name, round(c.bytes/1024/1024,1) as "Free Size M",a.bytes/1024/1024 as "Size M",
3 round((a.bytes - c.bytes)/1024/1024,1) as "Used Size M",round(b.bytes/1024/1024 ,1) as "Max Size M",
4 cast(((a.bytes - c.bytes)/a.bytes )*100 as int ) as "Use %",cast(((a.bytes - c.bytes)/b.bytes )*100 as int ) as "Max Used%"
5 from
6 (select tablespace_name ,sum(bytes) as bytes from dba_data_files group by tablespace_name ) a,
7 (SELECT TABLESPACE_NAME ,SUM(BYTES) as bytes FROM (
8 select tablespace_name ,sum(bytes) as bytes from dba_data_files where autoextensible=upper('no')
9 group by tablespace_name
10 union all
11 select tablespace_name ,sum(maxbytes) as bytes from dba_data_files where autoextensible=upper('yes')
12 group by tablespace_name ) GROUP BY TABLESPACE_NAME ) b,
13 (select tablespace_name,sum(bytes) as bytes from dba_free_space group by tablespace_name ) c
14 WHERE a.tablespace_name = b.tablespace_name(+)
15 AND b.tablespace_name = c.tablespace_name(+)
16 UNION ALL /** temp tablespace **/
17 select a.tablespace_name, round(c.bytes/1024/1024,1)as "Free Size M",round(a.bytes/1024/1024,1) as "Size M",
18 round((a.bytes - c.bytes)/1024/1024,1) as "Used Size M" ,round(b.bytes/1024/1024 ,1) as "Max Size M",
19 cast(((a.bytes - c.bytes)/a.bytes )*100 as int) as "Use %",cast(((a.bytes - c.bytes)/b.bytes )*100 as int ) as "Max Used%"
20 from
21 (select tablespace_name ,sum(bytes) as bytes from dba_temp_files group by tablespace_name ) a,
22 (SELECT TABLESPACE_NAME ,SUM(BYTES) as bytes FROM (
23 select tablespace_name ,sum(bytes) as bytes from dba_temp_files where autoextensible=upper('no')
24 group by tablespace_name
25 union all
26 select tablespace_name ,sum(maxbytes) as bytes from dba_temp_files where autoextensible=upper('yes')
27 group by tablespace_name ) GROUP BY TABLESPACE_NAME ) b,
28 (select tablespace_name,sum(free_space) as bytes from dba_temp_free_space group by tablespace_name ) c
29 WHERE a.tablespace_name = b.tablespace_name(+)
30 AND b.tablespace_name = c.tablespace_name(+)
31 ) order by 7 desc
32 /
TABLESPACE_NAME Free Size M Size M Used Size M Max Size M Use % Max Used%
------------------------------ ----------- ---------- ----------- ---------- ---------- ----------
T_DATA 396 2000 1604 2000 80 80
SYSTEM .8 740 739.3 32768 100 2
SYSAUX 26.9 530 503.1 32768 95 2
USERS 3.7 60 56.3 32768 94 0
TEMP 27 29 2 32768 7 0
UNDOTBS1 67.3 75 7.8 32768 10 0
6 rows selected.
SQL>
列名参数说明:表空间名称 ,空闲容量,表空间数据文件当前大小,表空间使用大小,表空间最大可扩展大小,使用百分比,最大可扩展使用百分比。

浙公网安备 33010602011771号