三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

ORACLE数据库查询用户表空间使用率

ORACLE数据库查询用户表空间使用率

当我们需要查询oracle数据库某个用户下的表空间总容量,已使用容量等信息时,可以使用一下sql查看总容量,已使用容量和占用率:

SELECT ROUND(SUM(allocSpace + extensibleSpace)) AS maxSpace, ROUND(SUM(usedSpace)) AS usedSpace, ROUND(SUM(usedSpace) * 100 / SUM(allocSpace + extensibleSpace), 2) AS ratio FROM ( SELECT b.TablespaceName, SUM(b.UsedByte) / 1024 / 1024 AS allocSpace, (SUM(b.UsedByte) - SUM(a.FreeByte)) / 1024 / 1024 AS usedSpace, SUM(a.FreeByte) / 1024 / 1024 AS freeSpace, SUM(b.ExtensibleByte) / 1024 / 1024 AS extensibleSpace, SUM(a.FreeByte + b.ExtensibleByte) * 100 / SUM(b.UsedByte + b.ExtensibleByte) AS freeRatio, SUM(a.Extend) AS totalExtends FROM ( SELECT DECODE(autoextensible, 'YES', DECODE(SIGN(maxbytes - bytes), 1, maxbytes - bytes, 0), 0) ExtensibleByte, bytes UsedByte, file_id FileID, tablespace_name TablespaceName FROM dba_data_files UNION ALL SELECT DECODE(autoextensible, 'YES', DECODE(SIGN(maxbytes - bytes), 1, maxbytes - bytes, 0), 0) ExtensibleByte, bytes UsedByte, file_id FileID, tablespace_name TablespaceName FROM dba_temp_files ) b, ( SELECT SUM(bytes) FreeByte, COUNT(*) Extend, file_id FileID, tablespace_name TablespaceName FROM dba_free_space GROUP BY file_id, tablespace_name UNION ALL SELECT SUM(bytes_free) FreeByte, COUNT(*) Extend, file_id FileID, tablespace_name TablespaceName FROM v$temp_space_header GROUP BY file_id, tablespace_name ) a WHERE b.FileID = a.FileID(+) AND b.TablespaceName = a.TablespaceName(+) AND b.TablespaceName IN ( SELECT tablespace_name FROM dba_ts_quotas WHERE username = #{userName,jdbcType=VARCHAR} UNION SELECT default_tablespace FROM dba_users WHERE username = #{userName,jdbcType=VARCHAR} ) GROUP BY b.TablespaceName ) t

替换sql中的username条件,查询结果如下:

也可以去掉最外层的查询,直接查询以下内容:

表空间名,已分配空间,已使用空间,剩余空间,可扩展空间,空闲比例,碎片数量
SELECT b.TablespaceName, SUM(b.UsedByte) / 1024 / 1024 AS allocSpace, (SUM(b.UsedByte) - SUM(a.FreeByte)) / 1024 / 1024 AS usedSpace, SUM(a.FreeByte) / 1024 / 1024 AS freeSpace, SUM(b.ExtensibleByte) / 1024 / 1024 AS extensibleSpace, SUM(a.FreeByte + b.ExtensibleByte) * 100 / SUM(b.UsedByte + b.ExtensibleByte) AS freeRatio, SUM(a.Extend) AS totalExtends FROM ( SELECT DECODE(autoextensible, 'YES', DECODE(SIGN(maxbytes - bytes), 1, maxbytes - bytes, 0), 0) ExtensibleByte, bytes UsedByte, file_id FileID, tablespace_name TablespaceName FROM dba_data_files UNION ALL SELECT DECODE(autoextensible, 'YES', DECODE(SIGN(maxbytes - bytes), 1, maxbytes - bytes, 0), 0) ExtensibleByte, bytes UsedByte, file_id FileID, tablespace_name TablespaceName FROM dba_temp_files ) b, ( SELECT SUM(bytes) FreeByte, COUNT(*) Extend, file_id FileID, tablespace_name TablespaceName FROM dba_free_space GROUP BY file_id, tablespace_name UNION ALL SELECT SUM(bytes_free) FreeByte, COUNT(*) Extend, file_id FileID, tablespace_name TablespaceName FROM v$temp_space_header GROUP BY file_id, tablespace_name ) a WHERE b.FileID = a.FileID(+) AND b.TablespaceName = a.TablespaceName(+) AND b.TablespaceName IN ( SELECT tablespace_name FROM dba_ts_quotas WHERE username = '' UNION SELECT default_tablespace FROM dba_users WHERE username = '' ) GROUP BY b.TablespaceName

← 返回列表