Oracle 查看表空间使用率,表空间扩展

1. dba_data_files 视图字段说明

字段说明
FILE_NAME文件名字
FILE_ID文件 ID,整个数据库每个文件的 ID 都是唯一的
TABLESPACE_NAME文件所属的表空间,ORACLE 中每个数据文件都和表空间是对应的
BYTES文件字节数量(换算成 MB: bytes/1024/1024 )
BLOCKS文件的块数量,和 BYTES 是可以换算的( BYTES/1024/BLOCK_SIZE 就可计算得到 BLOCKS 数量)
STATUS状态标识,文件当前是否可用
RELATIVE_FNO相对文件号,只在表空间唯一,每个表空间都有自己的相对文件号
AUTOEXTENSIBLE是否自动扩展
MAXBYTES最大可扩展大小(11G、12C 是 32G)
MAXBLOCKS最大可扩展数据块
INCREMENT_BY每次增加的块数量
USER_BYTES文件中实际有用的字节数
USER_BLOCKS文件中实际有用的块
ONLINE_STATUS在线状态

如果不能自动扩展,那么 MAXBYTES、MAXBLOCKS、INCREMENT_BY 都是 0

2. oracle 查看表空间使用率(包括临时表)

select * from (
Select a.tablespace_name,
to_char(a.bytes/1024/1024,'99,999.999') total_bytes,
to_char(b.bytes/1024/1024,'99,999.999') free_bytes,
to_char(a.bytes/1024/1024 - b.bytes/1024/1024,'99,999.999') use_bytes,
to_char((1 - b.bytes/a.bytes)*100,'99.99') || '%' use
from (select tablespace_name,
sum(bytes) bytes
from dba_data_files
group by tablespace_name) a,
(select tablespace_name,
sum(bytes) bytes
from dba_free_space
group by tablespace_name) b
where a.tablespace_name = b.tablespace_name
union all
select c.tablespace_name,
to_char(c.bytes/1024/1024,'99,999.999') total_bytes,
to_char( (c.bytes-d.bytes_used)/1024/1024,'99,999.999') free_bytes,
to_char(d.bytes_used/1024/1024,'99,999.999') use_bytes,
to_char(d.bytes_used*100/c.bytes,'99.99') || '%' use
from
(select tablespace_name,sum(bytes) bytes
from dba_temp_files group by tablespace_name) c,
(select tablespace_name,sum(bytes_cached) bytes_used
from v$temp_extent_pool group by tablespace_name) d
where c.tablespace_name = d.tablespace_name
)

《Oracle 查看表空间使用率,表空间扩展》

3. Oracle 查看普通表空间大小及使用率情况

SELECT a.tablespace_name "表空间名", 
total "表空间大小", 
free "表空间剩余大小", 
(total - free) "表空间使用大小", 
total / (1024 * 1024 * 1024) "表空间大小(G)", 
free / (1024 * 1024 * 1024) "表空间剩余大小(G)", 
(total - free) / (1024 * 1024 * 1024) "表空间使用大小(G)", 
round((total - free) / total, 4) * 100 "使用率 %" 
FROM (SELECT tablespace_name, SUM(bytes) free 
FROM dba_free_space 
GROUP BY tablespace_name) a, 
(SELECT tablespace_name, SUM(bytes) total 
FROM dba_data_files 
GROUP BY tablespace_name) b 
WHERE a.tablespace_name = b.tablespace_name 

《Oracle 查看表空间使用率,表空间扩展》

4. 查询表空间使用情况(增加最大块)

----查询表空间使用情况--- 
SELECT UPPER(F.TABLESPACE_NAME) "表空间名",     
D.TOT_GROOTTE_MB "表空间大小(M)",     
D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(M)",     
TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100,2),'990.99') "使用比",     
F.TOTAL_BYTES "空闲空间(M)",     
F.MAX_BYTES "最大块(M)"    
FROM (SELECT TABLESPACE_NAME,     
ROUND(SUM(BYTES) / (1024 * 1024), 2) TOTAL_BYTES,     
ROUND(MAX(BYTES) / (1024 * 1024), 2) MAX_BYTES     
FROM SYS.DBA_FREE_SPACE     
GROUP BY TABLESPACE_NAME) F,     
(SELECT DD.TABLESPACE_NAME,     
ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MB     
FROM SYS.DBA_DATA_FILES DD     
GROUP BY DD.TABLESPACE_NAME) D     
WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME     
ORDER BY 4 DESC;    

《Oracle 查看表空间使用率,表空间扩展》

5. 查看表空间是否具有自动扩展的能力

--查看表空间是否具有自动扩展的能力 
SELECT T.TABLESPACE_NAME,D.FILE_NAME,     
D.AUTOEXTENSIBLE,D.BYTES,D.MAXBYTES,D.STATUS     
FROM DBA_TABLESPACES T,DBA_DATA_FILES D     
WHERE T.TABLESPACE_NAME =D.TABLESPACE_NAME     
 ORDER BY TABLESPACE_NAME,FILE_NAME;   

6. Oracle 查询表空间使用情况

SELECT UPPER(F.TABLESPACE_NAME) "表空间名",
       D.TOT_GROOTTE_MB "表空间大小(M)",
       D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(M)",
       TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100,
                     2),
               '990.99') "使用比",
       F.TOTAL_BYTES "空闲空间(M)",
       F.MAX_BYTES "最大块(M)"
  FROM (SELECT TABLESPACE_NAME,
               ROUND(SUM(BYTES) / (1024 * 1024), 2) TOTAL_BYTES,
               ROUND(MAX(BYTES) / (1024 * 1024), 2) MAX_BYTES
          FROM SYS.DBA_FREE_SPACE
         GROUP BY TABLESPACE_NAME) F,
       (SELECT DD.TABLESPACE_NAME,
               ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MB
          FROM SYS.DBA_DATA_FILES DD
         GROUP BY DD.TABLESPACE_NAME) D
 WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME
 ORDER BY 4 DESC;

7. 查询已存在表空间信息

col "表空间名" for a20
col "数据文件全路径" for a50
set linesize 150
set pagesize 1000
select f.tablespace_name "表空间名",
       f.file_name "数据文件全路径",
       f.bytes / 1024 / 1024 / 1024 "当前容量/G",
       f.maxbytes / 1024 / 1024 / 1024 "最大容量/G"
  from dba_data_files f
 order by 1,regexp_substr(f.file_name, '[^/]+', 1, 
            length(regexp_replace(f.tablespace_name, '[^/]+')));

8. 新增表空间数据文件

ALTER TABLESPACE ts_test_data
  ADD DATAFILE '/oradata/orcl/ts_test_index02.dbf'
 SIZE 1024M AUTOEXTEND ON NEXT 200M MAXSIZE 10G;
-- 初始大小是1G,最大10G
-- 某次添加数据文件之时,无脑复制粘贴带上了空格
-- '/oradata/orcl/ts_test_index02.dbf '
-- 然后引起的问题排查了俩小时...
-- 至于带来啥问题,请自行脑补

9. 修改数据文件容量上限

alter database datafile 
  '/oradata/orcl/ts_test_index02.dbf' 
  autoextend on maxsize 30G;

10. 参考资料

  1. https://blog.csdn.net/qq_31144297/article/details/80036651
  2. https://blog.csdn.net/JERRY_DCH/article/details/113758696
    原文作者:王坦.
    原文地址: https://blog.csdn.net/WTUDAN/article/details/118526807
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞