如何在一次查询中获取所有者的姓名、他们的对象名称和该对象的大小?
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$
用户拥有对象的表空间相关联的文件。产生一个有意义的数字并不明显,更不用说您想要在结果的每一行上复制的数字了。但是,如果您在结果中获得细分级别的数据,那么您在该列中想要的值并不明显。
我想检查用户的哪些对象是最大的。所以我查询了每个用户的对象总大小:
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$
用户拥有对象的表空间相关联的文件。产生一个有意义的数字并不明显,更不用说您想要在结果的每一行上复制的数字了。但是,如果您在结果中获得细分级别的数据,那么您在该列中想要的值并不明显。