如何在一个查询中获取所有者的名称、他们的对象名称和此对象的大小?

问题描述

我想检查用户的哪些对象最大。所以我做了查询给我每个用户的对象总大小:

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$ 用户拥有对象的表空间相关联的那些。产生一个有意义的数字并不明显,更不用说您想要在结果的每一行上复制的数字。但是,如果您在结果中获得细分级别的数据,那么您希望该列中的值并不明显。