【发布时间】:2018-12-17 21:19:35
【问题描述】:
我有多个非 dba 模式,每个模式都分配了各自的表空间。
有没有办法让架构用户在不访问 dba 表的情况下检查自己分配的表空间使用情况?
我希望架构用户能够仅检查他们自己的表空间使用情况。
我正在使用 Oracle 11g
【问题讨论】:
我有多个非 dba 模式,每个模式都分配了各自的表空间。
有没有办法让架构用户在不访问 dba 表的情况下检查自己分配的表空间使用情况?
我希望架构用户能够仅检查他们自己的表空间使用情况。
我正在使用 Oracle 11g
【问题讨论】:
每个用户都可以访问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;
【讨论】: