我有多个非dba模式,每个模式都分配了各自的表空间。
模式用户是否可以在不访问dba表的情况下检查自己分配的表空间使用情况?
我希望模式用户只能检查自己的表空间使用情况。
我正在使用Oracle 11g
答案 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;