问题描述
我想检查用户的哪些对象最大。所以我做了查询给我每个用户的对象总大小:
select
owner,tablespace_name,round((sum(bytes)/1024/1024/1024),2) as size_in_gb,(select round((sum(bytes)/1024/1024/1024),2) from v$datafile) as total_space_in_gb
from
dba_segments
where
owner like 'OPS$%'
group by
owner,tablespace_name
order by
size_in_gb desc
fetch first 55 rows only;
但它只给我有关特定用户的所有对象的总大小的信息。如何检查每个用户对象及其大小?
解决方法
将 segment_name
添加到您的 select
列表和您的 group by
select
segment_name,owner,tablespace_name,round((sum(bytes)/1024/1024/1024),2) as size_in_gb,(select round((sum(bytes)/1024/1024/1024),2) from v$datafile) as total_space_in_gb
from
dba_segments
where
owner like 'OPS$%'
group by
segment_name,tablespace_name
order by
size_in_gb desc
fetch first 55 rows only;
不过,您的 v$datafile
查询在做什么并不明显。这是对每个数据文件的大小求和,而不仅仅是与 OPS$
用户拥有对象的表空间相关联的那些。产生一个有意义的数字并不明显,更不用说您想要在结果的每一行上复制的数字。但是,如果您在结果中获得细分级别的数据,那么您希望该列中的值并不明显。