在oracle中检查架构表空间使用情况

时间:2018-07-10 06:11:53

标签: sql oracle oracle11g

我有多个非dba模式,每个模式都分配了各自的表空间。

模式用户是否可以在不访问dba表的情况下检查自己分配的表空间使用情况?

我希望模式用户只能检查自己的表空间使用情况。

我正在使用Oracle 11g

1 个答案:

答案 0 :(得分:2)

每个用户都被允许访问user_segments,其中存储了每个段(表,索引,...)的大小信息

要获取所有细分的大小,请使用:

select segment_name,
       segment_type,
       tablespace_name,
       sum(bytes) / 1024 / 1024 as total_bytes_mb
from user_segments
group by segment_name, segment_type, tablespace_name
order by total_bytes_mb desc;

上面将LOB细分显示为例如SYS_LOB0005330538C00010$$

要将LOB段与相应的列匹配,可以使用:

select case 
          when lb.column_name is not null then lb.table_name||'.'||lb.column_name||' ('||sg.segment_name||')' 
          else sg.segment_name 
        end as segment_name, 
        sg.tablespace_name,
        sg.segment_type,
        sum(sg.bytes) / 1024 / 1024 as total_bytes_mb
from user_segments sg
  left join user_lobs lb on lb.segment_name = sg.segment_name
group by sg.segment_name, sg.segment_type, lb.column_name, lb.table_name, sg.tablespace_name
order by total_bytes_mb desc;