首页 > 解决方案 > 在 oracle 中检查模式表空间的使用情况

问题描述

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

有没有办法让模式用户检查他们自己分配的表空间使用情况而无需访问 dba 表?

我希望架构用户只能检查他们自己的表空间使用情况。

我正在使用 Oracle 11g

标签: sqloracleoracle11g

解决方案


每个用户都可以访问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;

推荐阅读