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

How to get name of owners, their object names and sizes of this object in one query?

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

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, owner, tablespace_name
order by
  size_in_gb desc
fetch first 55 rows only;

不过,您的 v$datafile 查询在做什么并不明显。这是对每个数据文件的大小求和,而不仅仅是那些与 OPS$ 用户拥有对象的表空间相关联的文件。产生一个有意义的数字并不明显,更不用说您想要在结果的每一行上复制的数字了。但是,如果您在结果中获得细分级别的数据,那么您在该列中想要的值并不明显。